什么是扩展方法?

56

.NET 中的扩展方法是什么?



编辑: 我在使用扩展方法上发布了一个后续问题。


1
请查看下面我的回答。基本上,您应该创建扩展而不是使用继承。 - Tom Anderson
@Tom Anderson - 那么创建扩展方法的决定主要是基于对源代码的访问吗? - Developer
1
在我的情况下,是的。另一个例子是便利性,而不是继承自System.Windows.Forms.Form并添加方法,然后修改所有源代码以使用该基类,我只需编写扩展程序,现在所有窗体都具有它。 - Tom Anderson
1
试着看一下这个问题。 https://dev59.com/0HRC5IYBdhLWcg3wOeSB - Tom Anderson
以下是关于C#扩展方法的简洁文章,包含足够的信息以帮助你入门:在C#和.NET中如何使用扩展方法及其使用时机 - Roboblob
https://www.codingcrest.com/extension-method-in-c/ - Imad
13个回答

0
这个问题已经得到了回答,但我想补充一下,如果你有一些类型在另一个项目中,并且不想返回该项目以添加一些功能,那么它非常有用。我们正在使用NHibernate,并且有一个数据持久层的项目,希望保持干净。为了将额外的方法添加到这些对象上并使其易于发现,我能够使用扩展方法,这真的让我的一天变得更加美好。
此外,由于没有其他人发布过它,这里有一篇关于它的好文章,可以在MSDN上找到 - http://msdn.microsoft.com/en-us/library/bb383977.aspx

0

我想加入一个更概念化、不太依赖于代码的解释。

想象一辆福特汽车从生产线上滚出来。你没有生产线的访问权限,但你希望所有福特汽车都能在车尾添加一个额外的扰流板(展示时看起来更酷)。你该怎么做?在计算机世界里,除非你有进入福特工厂内部的原始生产线的权限,否则你不能随意往福特汽车上螺栓东西。现在你可以:引入扩展方法。

现在你可以这样做:

Ford hilux = new Ford();

hilux.DisplayRearFoiler(); // you can now do this even though you don't have access to the Ford source code.

你需要创建扩展方法。请参考上面的答案。


0
有时我们想要为类型添加自己的附加功能,并将它们用作该类型的常规实例方法。如果我们有源代码,我们可以轻松地添加新功能而不创建扩展方法。但是当我们没有源代码但仍想要将附加功能作为实例方法添加和调用到类型上时,问题就出现了;扩展方法可以在源代码不可用时用于添加我们自己的功能到类型并将其用作实例方法。
当我们想要添加自己的功能时,我们甚至可以创建一个单独的静态类,并在我们的代码中调用其静态方法,而不是创建扩展方法,但这可能会影响代码的可读性。
LINQ从扩展方法中获益匪浅。
在开发时,使用Intellisense轻松获取所需方法对多个开发人员非常有帮助;而使用静态方法,我们每次都需要在代码中编写className.MethodName()。

感谢您的好回答。您所回答的问题已经有近10年的历史,并且已经有了被采纳的答案。为了确保您获得应得的赞同票,建议您考虑说明这个答案与其他答案的不同之处。 - totokaka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接