Mic*_*ows 12
通常,您不应通过扩展方法提供"基本"功能.它们只应用于"扩展"类功能.如果您可以访问基类代码,并且您尝试实现的功能在逻辑上是继承层次结构的一部分,那么您应该将它放在抽象类中.
我的观点是,仅仅因为你可以并不意味着你应该.当普通的OO编程无法为您提供合理的解决方案时,通常最好只使用优秀的老式OOP并使用更新的语言功能.
我同意迈克尔的观点。显然,基类应该包含所有基本功能扩展方法应该扩展基本功能。在像 Ruby 这样的动态语言中,通常使用扩展方法来提供附加功能,而不是使用子类。基本上,扩展方法是用来替换使用子类的,而不是替换使用基类的。
我见过的唯一例外是,如果您有多种具有不同类层次结构的类型(例如 winform 控件),您可以为每个类型创建一个子类,然后扩展该接口,从而提供“基”功能到一组不同的控件,而不需要扩展诸如控件或对象之类的所有内容。
编辑:回答你的第二个问题
我认为编译器会为你捕捉到这一点。