假设我们有两个具有冲突方法签名的接口:
interface IA { void F(); } interface IB { int F(); }
现在我们创建一个这样的类:
class Test : IA,IB { public void F() { ... } int IB.F() { ... } }
var t = new Test(); t.F(); //Calls public method F ((IB)t).F(); //Calls private method IB.F!!!
所以我的问题是:C#编译器如何知道可以在类范围之外调用IB.F?
解决方法
“private”方法包含以下内容:
.method private hidebysig newslot virtual final instance int32 ns.IB.F() cil managed { .override Tests.IB::F //... }
在IB中:
.method public hidebysig newslot abstract virtual instance int32 F() cil managed { }
.override告诉编译器查看IB中的声明.它说这个方法是公开的.