C#扩展方法架构问题

Ser*_*gio 4 c# extension-methods

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

Marc Gravell的回答很完美,它解决了我的问题.但它让我有所思考......

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

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

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

Mar*_*ell 7

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

var foo = data.Where(x=>x.IsActive).OrderBy(x=>x.Price).First();
Run Code Online (Sandbox Code Playgroud)

这使LINQ:

var foo = (from x in data
           where x.IsActive
           order by x.Price
           select x).First();
Run Code Online (Sandbox Code Playgroud)

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

实际上,扩展方法不适合面向对象 - 它们是一种实用的滥用方式,以牺牲纯度为代价使生活更轻松.没有理由以同样的方式稀释静态方法.

  • 静态扩展方法可以使我们摆脱所有那些用静态方法填充的"Helper"类.请参阅反馈,了解用例. (2认同)