我可以有两个具有相同参数但含义不同的相同函数名吗?
例如:
public void test(string name)
public void test(string age)
谢谢你。
我可以有两个具有相同参数但含义不同的相同函数名吗?
例如:
public void test(string name)
public void test(string age)
谢谢你。
不,你不能。签名没有什么不同——参数名称是什么并不重要。
通过指定访问级别(如公共或私有)、可选修饰符(如抽象或密封)、返回值、方法名称和任何方法参数,在类或结构中声明方法。这些部分一起是方法的签名。
就像其他一些答案所说的那样,请考虑您正在接收的数据类型。名称确实是一个典型的字符串,但年龄是否必须是?如果您允许它成为 - 例如 -int
那么您可以根据需要重载您的方法。
不,您不能重载返回类型或参数名称。与其他一些语言(最值得注意的是,Objective C 1)不同,参数名称不是函数签名的一部分。
方法的签名由方法的名称和每个形式参数的类型和种类(值、引用或输出)组成,按从左到右的顺序考虑。方法的签名特别不包括返回类型,也不包括可以为最右边的参数指定的 params 修饰符。
您可以拥有具有相同名称的静态和非静态方法,但不同的参数遵循与方法重载相同的规则,它们只是不能具有完全相同的签名。
编号 签名和重载
如果您需要具有不同含义的方法,为什么不创建具有不同名称的方法?对同一对象上的不同事物使用相同的方法名称会令人困惑。
您可以使用可选参数和默认值将这些方法混合在一起:
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");
不是很干净,但仍然可以使用。
否 - 编译器抛出错误,因为编译器使用参数来确定调用哪个方法,而不是返回类型。
不。
一个OVERLOADED FUNCTION 必须有不同的 SIGNATURE。即参数应该不同,无论是在参数数量还是不同数据类型参数的顺序方面。