哪一个更好?一目了然可选参数似乎更好(代码更少,XML文档更少等),但为什么大多数MSDN库类使用重载而不是可选参数?
当您选择使用可选参数(或重载)时,是否有任何特殊事项需要注意?
我正在观看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开始,将具有可选参数的紧密相关的构造函数和方法组作为单一方法更有意义,还是有充分理由坚持使用传统的多重载荷机制?
看看CancellationToken.None
它的实现,它只是回归default(CancellationToken)
.但是,我在CancellationToken
文档中看不到两者是等价的.
我想提供这样的API,但直到我确定它总能工作:
Task DoSomething(CancellationToken token = default(CancellationToken))
Run Code Online (Sandbox Code Playgroud)
它定义的行为default(CancellationToken)
是否相同CancellationToken.None
,或者这只是一个实现细节?