我如何解决扩展库中的扩展方法歧义错误?

问题描述 投票:1回答:1

假设我有一个扩展方法。

public static string DoSomething(this IInterfaceA @this) ...

public static string DoSomething(this IInterfaceB @this) ...

但是如果我有一个实现两个接口的类,那么对于扩展库,是否有可能指出它应该使用哪个接口?

c# extension-methods
1个回答
2
投票

简短的回答-不,不可能。

长答案:扩展方法只是一个静态方法,它确实接受某种类型的参数。稍后,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()
© www.soinside.com 2019 - 2024. All rights reserved.