C#中扩展方法和普通方法的区别

4
在C#中,扩展方法普通方法有什么区别呢?扩展方法是一种静态方法,可以对一个已存在的类进行扩展,而不需要修改原始类的定义。使用扩展方法,您可以向现有类型添加新的方法,从而提供更多功能和灵活性。普通方法则是直接在类中定义的成员方法,不能对已存在的类进行扩展。希望这能帮到您。

我认为这一切都与可读性和链接有关... - Yousha Aleayoub
3个回答

7
我想你真正需要了解的是静态方法和实例方法之间的区别
归根结底,扩展方法只是一些不错的编译器魔法和语法糖,使您可以调用静态方法,就像它是在特定类实例上定义的方法一样。 但是,它不是实例方法,因为必须将该特定类的实例传递到函数中。

4

ExtensionMethods : 让您定义一组方法到一个类,而不需要继承另一个类的好处之一是比继承更灵活。

Methods : 它们用于实现为类定义的操作。

查看扩展方法示例


1
你仍然可以像调用普通方法一样调用扩展方法。你不必局限于从它扩展的类中调用它。 - Phill

3
扩展方法的一个非常好的特性是它们可以在空对象上调用,如下所示:

(译者注:即可空性)

myclass x = null;
x.extension_method(); // this will work
x.method(); // this won't

可惜的是,例如大多数string方法都不是扩展方法。

x.ToLower();

如果x为空,应该返回null。我的意思是,这将非常有用。
当我需要这种空值透明度时,我更喜欢编写扩展方法。

这只是个人练习,但我从不在我的扩展方法中编写空值检查,因为我期望它们的行为像任何其他实例方法一样,并在对空对象调用时抛出 NullReferenceException 异常。这只是直觉,即 null.Something 应该总是抛出异常。 - Extragorey
@Extragorey,今天我的关于null的回答就不那么有根据了,因为你可以针对null进行检查,然后以统一的方式使用.?运算符。 - greenoldman
确实,?. 让空值检查变得更加容易,但总有一些地方你没有想到使用它或者没有预料到某些东西会是空值。 - Extragorey

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