C#扩展方法体系结构问题

我最近问了这个问题:编译器错误引用了自定义的C#扩展方法

Marc Gravell的回答很完美,它解决了我的问题。 但它给了我一些想法......

如果和扩展方法必须放在静态类上,并且方法本身必须是静态的,为什么我们不能创建静态扩展方法?

我明白标记为“this”的参数将被用来允许访问我们正在扩展的对象的一个​​实例。 我不明白的是为什么不能创建一个静态的方法......在我看来,这是一个毫无意义的限制......

我的问题是:为什么我们不能创建一个可以用作静态方法的扩展方法?


我期望真正的答案很简单:没有一个好的用例。 例如,它的优点是它可以在现有类型上启用流畅的API(它本身不提供逻辑) - 即

var foo = data.Where(x=>x.IsActive).OrderBy(x=>x.Price).First();

这使LINQ成为可能:

var foo = (from x in data
           where x.IsActive
           order by x.Price
           select x).First();

用静态方法,这根本不是问题,所以没有理由; 只需使用第二种类型的静态方法即可。

事实上,扩展方法并没有适当的面向对象 - 它们是一种务实的滥用,以牺牲纯度为代价让生活更加轻松。 没有理由以相同的方式稀释静态方法。


因为该功能在C#中不存在。

作为一种解决方法,静态方法可以在另一个类中实现,并通过该类调用以提供附加功能。

例如,XNA有一个MathHelper类,理想情况下它将是Math类的静态扩展。

该社区问我们是否认为这是C#4.0的一个好主意


我的想法是为了兼容性 - 如果你突然提出了所有静态方法的扩展方法,并且需要使用这个操作符,那么你可能会无意中破坏现在正在用扩展方法覆盖正常方法的代码。

该参数允许控制,因此不会中断兼容性。

只是一个想法,但。

链接地址: http://www.djcxy.com/p/96953.html

上一篇: C# Extension Methods Architecture Question

下一篇: How can I test for an expected exception with a specific exception message from a resource file in Visual Studio Test?