假设我有一个继承自 2 个接口(interface)(I1
和 I2
)的类 C
。我还有一个方法的两个版本 (DoStuff
),每个版本都将其中一个接口(interface)作为参数。如果我调用 DoStuff(C)
,会调用哪个?
interface I1 { ... }
interface I2 { ... }
class C : I1, I2 { ... }
int DoStuff(I1 target) { ... }
int DoStuff(I2 target) { ... }
//What gets called here?
C target = new C()
DoStuff(target)
如果 I2
派生自 I1
,我认为它相对简单 - I2
版本被调用。我对接口(interface)独立的情况感兴趣。
假设我无法编辑C
、I1
或I2
。还有 .NET 2.0,如果有任何不同的话。
最佳答案
都没有被调用。如果您的两个方法是同一个类中的重载,则编译器根本不会尝试消除歧义。它根本不会编译您的代码,因为您将 target
声明为实现两个接口(interface)的类型,所以它在您的两个重载之间不明确。
如果您将 target
声明为接口(interface)类型之一,或者在调用时将其强制转换(如 Jon 所示),那么就没有歧义。
关于c# - C# 如何消除方法调用中多个接口(interface)之间的歧义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7346579/