5

我可以有两个具有相同参数但含义不同的相同函数名吗?

例如:

public void test(string name) 

public void test(string age) 

谢谢你。

4

7 回答 7

4

不,你不能。签名没有什么不同——参数名称是什么并不重要。

通过指定访问级别(如公共或私有)、可选修饰符(如抽象或密封)、返回值、方法名称和任何方法参数,在类或结构中声明方法。这些部分一起是方法的签名。

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

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

于 2012-09-14T09:39:04.607 回答
3

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

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


1即使在那里,它也不完全是成为选择器一部分的参数名称。

于 2012-09-14T09:39:23.577 回答
2

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

于 2012-09-14T09:39:46.143 回答
1

编号 签名和重载

如果您需要具有不同含义的方法,为什么不创建具有不同名称的方法?对同一对象上的不同事物使用相同的方法名称会令人困惑。

于 2012-09-14T09:39:23.317 回答
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");

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

于 2012-09-14T09:43:31.070 回答
0

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

于 2012-09-14T09:51:25.047 回答
0

不。

一个OVERLOADED FUNCTION 必须有不同的 SIGNATURE。即参数应该不同,无论是在参数数量还是不同数据类型参数的顺序方面。

于 2014-04-08T12:12:26.930 回答