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