c# - C# 如何消除方法调用中多个接口(interface)之间的歧义?

标签 c# interface disambiguation

假设我有一个继承自 2 个接口(interface)(I1I2)的类 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)独立的情况感兴趣。

假设我无法编辑CI1I2。还有 .NET 2.0,如果有任何不同的话。

最佳答案

都没有被调用。如果您的两个方法是同一个类中的重载,则编译器根本不会尝试消除歧义。它根本不会编译您的代码,因为您将 target 声明为实现两个接口(interface)的类型,所以它在您的两个重载之间不明确。

如果您将 target 声明为接口(interface)类型之一,或者在调用时将其强制转换(如 Jon 所示),那么就没有歧义。

关于c# - C# 如何消除方法调用中多个接口(interface)之间的歧义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7346579/

相关文章:

c# - 尝试在 .NET Core 3.0 中植入角色时,获取任务被取消错误

c# - ASP.NET MVC 6 Controller 工厂

delphi - 向非接口(interface)派生对象添加接口(interface)

visual-studio - 分层组织应用程序

java - 为什么接口(interface)变量需要初始化?

c# - 将 float 转换为 decimal 在 C# 中会失去精度

c# - 响应讨价还价查找器最大压缩 c#

C# - 'Double' 是一个不明确的引用

C++ 访问继承类的成员,其中继承类是模板参数

algorithm - 对地名数据进行位置消歧的最佳方法是什么?