Bru*_*hes 2 c# overloading function
我有这个测试代码:
void func1(string a, params string[] p)
{
func1(a, true, p);
}
void func1(string a, bool b, params string[] p)
{
//...
}
void func2(string a, bool b = true, params string[] p)
{
//...
}
void exec()
{
func1("a", "p1", "p2");
func2("a", "p1", "p2");
}
Run Code Online (Sandbox Code Playgroud)
是func1和func2平等?
创建时没有错误func2,但是,当我尝试func2在exec中使用like时(使用可选值),编译器显示错误This function has some invalid arguments.
我认为func1并且func2对于将像API一样使用此功能的人来说是相同的.
这段代码有什么问题?我可以将此方法用于具有可选和params值的函数吗?
Jon*_*eet 10
通常,可选参数必须在方法声明的末尾出现 - 参数数组(例如p此处)是唯一的例外.但是当涉及到使用参数时,编译器将假设所有位置参数与方法声明的顺序相同...因此,如果要使用选项和参数数组,则会遇到麻烦.这应该没问题:
func2("a", p: new[] { "p1", "p2" })
Run Code Online (Sandbox Code Playgroud)
但我个人只是避免混合参数数组和可选参数.这显然令人困惑.
我相信C#5规范的相关部分是7.5.1.1,其中包括:
具有以其展开形式调用的参数数组的函数成员的位置参数,其中在参数列表中的相同位置处不发生固定参数,其对应于参数数组的元素.
另见第7.5.3.1节.一切都很复杂......