2012-08-16 39 views
0

C#能够处理方法版本吗?例如,如果我在Ruby中有两个具有相同名称和参数的方法,则会执行最新版本。是否有可能在C#中有两种类似的方法(名称和参数),比如Ruby?

C#如何处理?它会引发错误还是执行最新版本?

+7

毫无疑问这将是很容易测试自己? – 2012-08-16 08:36:06

+1

@AlexanderR Yup,当然,但我想知道是否有可能使用我不知道的东西。 – RKh 2012-08-16 08:41:23

+0

C#是编译语言,所以代码将被编译,如果两个具有相同名称和参数的方法会导致代码不明确。在ruby中,它被解释为不会重新定义方法的问题。 – 2012-08-16 08:44:28

回答

2

您不能在C#中的同一个类中有两个具有相同名称和参数列表的方法。您需要以某种方式区分这些方法,或者使用不同的名称或不同的参数类型和/或不同数量的参数。你只会得到一个编译错误。尽管在C#中没有“最新版本”方法的概念,但它听起来像是在试图完成一种方法重写的形式(我不熟悉ruby,所以我不知道最近的版本版本意味着),你可以通过子类和方法覆盖来实现类似的功能。

1

如果它们完全相同(命名空间,类,名称和参数),则会出现编译错误。

0

您不能在同一个类中拥有2个完全相同签名的方法。

0

参数必须至少不同,否则会出现编译错误。

class CalculateSomething 
{ 
    public static int Plus(int number1, int number2) 
    { 
     return Plus(number1, number2, 0); 
    } 

    public static int Plus(int number1, int number2, int number3) 
    { 
     return number1 + number2 + number3; 
    } 
} 
1

Member Overloading是好得多过去的c#

采用optional parameters的事情。没有重复的代码和更少的代码来维护。

public int SomeCalcMethod(int object1, int object2, int? object3 = null) 
{ 
    return object1 + object2 + (int)(object3 ?? 0); 
} 

无需重载方法:

public int SomeCalcMethod(int object1 , int object2) 
{ 
    return object1 + object2; 
} 

public int SomeCalcMethod(int object1 , int object2, int object3) 
{ 
    return object1 + object2+ object3 ; 
} 
相关问题