我一直在研究IL中的显式接口实现。以下类中的方法Method
(接口IA
上只有一个Method()
):
public class B : IA
object IA.Method() {
/* code */
}
}
编译为以下IL方法签名:
.method private hidebysig newslot virtual final instance object IA.Method() cil managed {
.override IA::Method
/* code */
}
我的问题是 - 为什么IL IA.Method()
中的方法名称,而不仅仅是Method
?这实际意味着什么,如果错过它,为什么它不起作用?我无法在ECMA规范中找到任何内容或谷歌。
答案 0 :(得分:3)
这是因为这样你可以多次使用一个方法。
public class B : IA
{
object Method() { }
object IA.Method() { }
}
第一种是常规方法。第二个是接口实现。没有前缀,你就不能同时拥有它们,因为你无法区分它们。
new B().Method(); // calls the normal method
((IA)new B()).Method(); // calls the IA interface method
答案 1 :(得分:2)
以下是您正在寻找的文档:
http://msdn.microsoft.com/en-us/library/ms173157.aspx
原因是处理这种情况:
public class C : IA, IB
{
object IA.Method()
{
// Implementation!
}
object IB.Method()
{
// Implementation!
}
}
如果你有两个方法具有你想要实现的相同签名,你需要一些东西来使它们不同,这样你就可以提供单独的实现。界面的名称提供了。