我正在观看Anders关于C#4.0的讨论和C#5.0的预览,它让我想到C#中何时可以提供可选参数什么是推荐的方法来声明不需要指定所有参数的方法?
例如,FileStream类这样的东西有大约十五种不同的构造函数,它们可以分为逻辑"族",例如下面的字符串,来自a的那些IntPtr和来自a的那些SafeFileHandle.
FileStream(string,FileMode);
FileStream(string,FileMode,FileAccess);
FileStream(string,FileMode,FileAccess,FileShare);
FileStream(string,FileMode,FileAccess,FileShare,int);
FileStream(string,FileMode,FileAccess,FileShare,int,bool);
Run Code Online (Sandbox Code Playgroud)
在我看来,这种类型的模式可以通过改为使用三个构造函数来简化,并使用可以默认的参数的可选参数,这将使构造函数的不同系列更加清晰[注意:我知道这个更改不会是在BCL制作,我正在假设这种情况].
你怎么看?从C#4.0开始,将具有可选参数的紧密相关的构造函数和方法组作为单一方法更有意义,还是有充分理由坚持使用传统的多重载荷机制?
我有两个重载方法,一个带有可选参数.
void foo(string a) { }
void foo(string a, int b = 0) { }
Run Code Online (Sandbox Code Playgroud)
现在我打电话给:
foo("abc");
Run Code Online (Sandbox Code Playgroud)
有趣的是第一次重载被调用.为什么第二次重载的可选值设置为零?
说实话,我希望编译器带来一个错误,至少是一个警告,以避免无意中执行错误的方法.
这种行为的原因是什么?为什么C#团队以这种方式定义它?