放弃重载有利于Extension方法

Muh*_*han 2 c# extension-methods api-design c#-4.0

既然我们在C#中有扩展方法,那么为了传递默认值,在实现任何类的过程中是否还有任何重点?为什么在重载时可以使扩展方法污染类实现?重载的任何优点(用于传递默认值)?

我正在计算默认参数的选项,因为它强制参数的特定排序(即默认值可以结束)以及默认值在客户端代码中编译并且服务包可能因此而中断的事实.

Ree*_*sey 6

既然我们在C#中有扩展方法,那么为了传递默认值,在实现任何类的过程中是否还有任何重点?

我会使用可选参数而不是扩展方法来删除重载.

扩展方法有很多缺点 - 它们对私有成员的访问权限较少,它们具有可发现性问题(因为它们是在单独的类中定义的),等等.

但是,有时使用重载方法和构造函数比添加可选参数更好 - 与您已经提到的问题分开.这包括:

  • 使用不了解可选参数的语言.C#和VB.Net并不是唯一的.NET语言.
  • 有时候可选参数不会削减它 - 例如,你经常需要一个真正的默认构造函数和可选参数,而它们在手写代码时看起来像是这样,在反射/序列化/等方面表现得非常不同.