我一直在考虑使用扩展方法作为抽象基类的替代.扩展方法可以提供默认功能,并且可以通过在派生类中放置相同签名的方法来"覆盖".
我不应该这样做的原因?
另外,如果我有两个具有相同签名的扩展方法,使用哪一个?有没有办法确定优先权?
通常,您不应通过扩展方法提供"基本"功能.它们只应用于"扩展"类功能.如果您可以访问基类代码,并且您尝试实现的功能在逻辑上是继承层次结构的一部分,那么您应该将它放在抽象类中.
我的观点是,仅仅因为你可以并不意味着你应该.当普通的OO编程无法为您提供合理的解决方案时,通常最好只使用优秀的老式OOP并使用更新的语言功能.
这绝对是一个坏主意.扩展方法是静态绑定的,这意味着,除非您对编译时类型为子类型的对象调用覆盖,否则您仍将继续调用扩展方法.再见多态性.这个页面很好地讨论了扩展方法的危险.