扩展方法的缺点?

Son*_*Lee 28 c# extension-methods

扩展方法是一个非常有用的功能,您可以在任何类中添加所需的许多功能.但我想知道是否有任何不利因素可能给我带来麻烦.有什么意见或建议吗?

Jon*_*eet 36

  • 导入扩展方法的方式(即一次整个命名空间)并不精细.您无法从命名空间导入一个扩展而不会获得所有其他扩展.
  • 从定义方法的源代码中不是很明显.这也是一个优点 - 它意味着您可以使代码看起来与类型上的其他方法一致,即使您因任何原因无法将它放在同一个地方.换句话说,代码在高级别上更容易理解,但在准确执行的内容方面更复杂.我认为一般来说LINQ也是如此.
  • 您只能拥有扩展方法,而不是属性,索引器,运算符,构造函数等.
  • 如果您正在扩展第三方类,并且在更高版本中它们引入了具有相同签名的新方法,您将不会轻易知道您的调用代码的含义已经改变.如果新方法您的扩展非常相似,但具有微妙不同的边界条件(或其他),那么这可能会导致一些非常棘手的错误.但这种情况相对不太可能发生.


Buu*_*yen 5

几件事:

  • 除非您在 VS.NET 中,否则并不总是清楚扩展方法的来源
  • 无法通过反射或 C# 4.0 的动态查找来解析扩展方法