我可以使用相同参数但含义不同的两个相同功能名称。
例如:
public void test(string name)
public void test(string age)
谢谢。
答案 0 :(得分:4)
通过指定访问级别(如public或private),可选修饰符(如abstract或sealed),返回值,方法名称和任何方法参数,在类或结构中声明方法。这些部分是该方法的标志。
正如其他一些答案所述,请考虑您正在接受的数据类型。名称确实是一个典型的字符串,但是年龄必须是吗?如果您允许它 - 例如 - 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-参数应该是不同的,无论是参数的数量还是不同数据类型参数的顺序。