假设我们有两个方法签名冲突的接口:
interface IA
{
void F();
}
interface IB
{
int F();
}
现在我们创建一个这样的类:
class Test : IA, IB
{
public void F() { ... }
int IB.F() { ... }
}
名为 as 的方法IB.F
看起来像一个private
方法,但是您可以执行以下操作:
var t = new Test();
t.F(); //Calls public method F
((IB)t).F(); //Calls private method IB.F!!!
所以我的问题是: C# 编译器如何知道IB.F
可以在类范围之外调用?
我猜是那个IB.
前缀,但查看了IL
代码,它只是作为一个private
带有奇怪签名的方法出现。