我最近问过这个问题: 引用自定义C#扩展方法的编译器错误
Marc Gravell的回答很完美,它解决了我的问题.但它让我有所思考......
如果和Extension方法必须放在静态类上,并且方法本身必须是静态的,为什么我们不能创建静态的扩展方法?
我知道标记为"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();
使用静态方法,这根本不是问题,所以没有理由; 只需在第二种类型上使用静态方法.
实际上,扩展方法不适合面向对象 - 它们是一种实用的滥用方式,以牺牲纯度为代价使生活更轻松.没有理由以同样的方式稀释静态方法.