可能重复:
您发现扩展方法的哪些优点?
好吧,首先,我意识到这听起来有争议,但我并不是要对抗。我出于真正的好奇心提出了一个严肃的问题(或者困惑是一个更好的词)。
为什么将扩展方法引入 .NET?除了让事情看起来不错(我所说的“不错”是指“看似实例方法”)之外,它们还提供什么好处?
对我来说,任何使用这样的扩展方法的代码:
Thing initial = GetThing();
Thing manipulated = initial.SomeExtensionMethod();
具有误导性,因为它暗示 thatSomeExtensionMethod
是 的实例成员Thing
,这会误导开发人员相信(至少作为一种直觉......你可能会否认它,但我肯定已经观察到这一点)(1)SomeExtensionMethod
可能是有效实现的,并且(2) 因为SomeExtensionMethod
它实际上看起来像是课程的一部分,所以如果在未来的某个时候进行修改Thing
,它肯定会保持有效Thing
(只要作者Thing
知道他/她在做什么)。
但事实是扩展方法无法访问受保护的成员或它们正在扩展的类的任何内部工作,因此它们与任何其他静态方法一样容易损坏。
我们都知道,上面很容易是:
Thing initial = GetThing();
Thing manipulated = SomeNonExtensionMethod(initial);
对我来说,这似乎更多,因为没有更好的词,诚实。
我错过了什么?为什么存在扩展方法?