【发布时间】:2009-11-18 22:26:54
【问题描述】:
好吧,首先,我意识到这听起来有争议,但我并不是要对抗。我出于真正的好奇心提出了一个严肃的问题(或者也许 puzzlement 是一个更好的词)。
为什么将扩展方法引入 .NET?除了让事情看起来不错(我所说的“不错”是指“看似实例方法”)之外,它们还有什么好处?
对我来说,任何使用这样的扩展方法的代码:
Thing initial = GetThing();
Thing manipulated = initial.SomeExtensionMethod();
具有误导性,因为它暗示 SomeExtensionMethod 是 Thing 的实例成员,这会误导开发人员相信(至少作为一种直觉......你可能会否认,但我确实观察到了这一点) (1) SomeExtensionMethod 可能被有效地实现,并且 (2) 因为 SomeExtensionMethod 实际上看起来它是 Thing 类的part,如果 Thing 修改为未来某个时间点(只要Thing 的作者知道他/她在做什么)。
但事实是扩展方法无法访问受保护的成员或它们扩展的类的任何内部工作,因此它们与任何其他静态方法一样容易损坏。
我们都知道上面的很容易是:
Thing initial = GetThing();
Thing manipulated = SomeNonExtensionMethod(initial);
对我来说,这似乎更多,因为没有更好的词,诚实。
我错过了什么?为什么存在扩展方法?
【问题讨论】:
-
@Zarembisty:谢谢,我在发布此内容之前诚实地搜索了一个副本,但不知何故没有找到那个。如果人们想关闭它,这是可以理解的。
-
我发现 SO 搜索只是马马虎虎;谷歌总能找到答案(谢天谢地,越来越多的答案指向 SO)
标签: c# .net extension-methods static-methods