功能过载

时间:2012-09-14 09:37:24

标签: c#

我可以使用相同参数但含义不同的两个相同功能名称。

例如:

public void test(string name) 

public void test(string age) 

谢谢。

7 个答案:

答案 0 :(得分:4)

不,你不能。签名没有区别 - 参数名称是什么并不重要。

  

通过指定访问级别(如public或private),可选修饰符(如abstract或sealed),返回值,方法名称和任何方法参数,在类或结构中声明方法。这些部分是该方法的标志。

     

http://msdn.microsoft.com/en-us/library/ms173114.aspx

正如其他一些答案所述,请考虑您正在接受的数据类型。名称确实是一个典型的字符串,但是年龄必须是吗?如果您允许它 - 例如 - int,那么您可以根据需要重载您的方法。

答案 1 :(得分:3)

不,您不能在返回类型或参数名称上重载。与其他一些语言(最值得注意的是,Objective C 1 )不同,参数名称不是函数签名的一部分。

  

方法的签名包括方法的名称以及每个形式参数的类型和种类(值,引用或输出),按从左到右的顺序考虑。方法的签名特别不包括返回类型,也不包括可以为最右边的参数指定的params修饰符。

<小时/> 1 即使参数名称也不是选择器的一部分。

答案 2 :(得分:2)

您可以使用相同名称的静态和非静态方法,但遵循与方法重载相同的规则的不同参数,它们不能具有完全相同的签名。

答案 3 :(得分:1)

没有。 Signatures and Overloading

如果您需要具有不同含义的方法,为什么不创建具有不同名称的方法?在同一个对象上为不同的东西使用相同的方法名称会很困惑。

答案 4 :(得分:1)

您可以使用可选参数和默认值将这些方法混合在一起:

public void test(string name = null, string age = null)
{
  if (name != null) 
  {
     // Do something
  }
  else if (age != null)
  {
     // Do something else
  }
}

你可以这样称呼这个方法:

test(name: "John");
test(age: "30");

不是很干净,但仍然可以使用。

答案 5 :(得分:0)

否 - 编译器抛出错误,因为编译器使用参数来确定要调用的方法,而不是返回类型。

答案 6 :(得分:0)

NO。

OVERLOADED FUNCTION必须具有不同的SIGNATURE 。 ie-参数应该是不同的,无论是参数的数量还是不同数据类型参数的顺序。