假设我有一个扩展方法。
public static string DoSomething(this IInterfaceA @this) ...
和
public static string DoSomething(this IInterfaceB @this) ...
但是如果我有一个实现两个接口的类,那么对于扩展库,是否有可能指出它应该使用哪个接口?
简短的回答-不,不可能。
长答案:扩展方法只是一个静态方法,它确实接受某种类型的参数。稍后,Intellisense会扫描您的代码以查找所有扩展方法,并向我们提供一种语法糖,该语法糖可以“在类的实例上”调用它们。
另一方面,接口描述对象的行为,并根据对象的作用将对象分组和分离/分离:
IBird { void Fly(); }
IBug { void Crawl(); }
class Parrot : IBird {}
class Ant : IBug {}
如果我们有类似的东西:
IGlidingBird { void Fly(); } // and
IFlappingBird { void Fly(); }
然后,我们的设计可能很糟糕,因为接口是虚拟方法的容器,因此对其实际实现一无所知。
在您的示例中,您将看到一个编译时错误:“以下方法之间的调用不明确...”,您必须首先将对象强制转换为一种接口类型,以使编译器知道要使用哪些方法使用:
((IInterfaceA)instance).DoSomething()
((IInterfaceB)instance).DoSomething()