小编典典

是否应该在C#4.0中使用重载或可选参数声明方法?

c#

我正在看Anders谈论C#4.0和C#5.0的预览,这让我思考什么时候C#中有可选参数可用,这是声明不需要指定所有参数的方法的推荐方式吗?

例如,类似FileStream该类的东西有大约十五个不同的构造函数,这些构造函数可以划分为逻辑“族”,例如,字符串中的下面的那些,an中的一个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);

在我看来,可以通过以下方式简化这种类型的模式:改为使用三个构造函数,并对可以默认使用的参数使用可选参数,这将使不同的构造函数系列更加不同[注:我知道这种更改不会在BCL中完成,我假设是针对这种情况]。

你怎么看?从C#4.0开始,将密切相关的构造函数和方法组作为具有可选参数的单个方法会更有意义,还是有充分的理由坚持传统的多次重载机制?


阅读 237

收藏
2020-05-19

共1个答案

小编典典

我会考虑以下几点:

  • 您是否需要从不支持可选参数的语言中使用代码?如果是这样,请考虑包括重载。
  • 您的团队中有没有成员强烈反对可选参数?(有时候,做出您不喜欢的决定要比对案件辩护容易。)
  • 您是否确信在代码构建之间不会更改默认设置,或者如果可能,您的调用方会同意吗?

我还没有检查默认值的工作方式,但我假设默认值将包含在调用代码中,与对const字段的引用几乎相同。通常没关系-更改默认值还是很重要的-
但这是要考虑的事情。

2020-05-19