当前位置: 首页 > 编程语言 > C#

为什么非静态类中的静态方法不能作为扩展方法使用?分享

时间:2023-04-11 00:17:04 C#

为什么非静态类中的静态方法不能作为扩展方法?可能重复:扩展方法要求类是静态的在.NET中:为什么非静态类中的静态方法不能是扩展方法?EricLippert可能对这个问题有一个非常好的答案,但它的要点可能是:我们认为如果我们限制您必须为其寻找扩展方法的位数,这对程序员和编译器来说都会更容易。这种策略倾向于迫使用户将所有扩展方法放入为此目的指定的几个特定类中。静态类需要有扩展方法是有道理的。第一个原因是静态类是无状态的……即您不必实例化该类。……但这只是我的直觉。否则对我来说没有意义。我认为强制扩展方法驻留在公共/内部静态类中也可以降低使用它们的成本。在编译时,每当您对扩展方法使用实例语法糖时,它都会被转换为对静态方法(定义扩展)的调用并传递给您的实例。除了良好的语法外,它与实现静态方法并将您的实例作为参数传递没有什么不同。这正是发生的事情。您不能对静态类执行此操作,因为您不能将静态类作为参数传递给方法。因为,事情就是这样。我的猜测是,允许静态扩展方法会使语言复杂化(每个函数都会增加一种或另一种复杂性),而几乎没有任何好处。例如,如果您要在String上定义一个静态方法,那么当您可以使用相同的静态方法定义自己的类时,这样做有什么好处呢?实例级扩展方法很有用,因为它们使用类型实例的当前状态。静态方法没有上下文,因此除了为其他地方定义的静态方法进行逻辑分组外,它不提供任何实用程序(即,定义属于String类的String.IsNullOrFullOfSomeChar(charc)在逻辑上是有意义的,但除了没有优势除此之外。是的,这将是一个可怕的方法,只是一个例子)。扩展方法是LINQ的结果。它们的实现是为了使LINQ以设计者的预期方式工作。不需要静态扩展,因此不会实现它们。以上是C#学习教程:为什么非静态类中的静态方法不能作为扩展方法使用?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: