IL에서는 명시적 인터페이스 구현이 어떻게 구현됩니까?
-
17-09-2020 - |
문제
저는 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 사양이나 Google에서 이에 대한 내용을 찾을 수 없습니다.
해결책
이렇게 하면 메서드를 여러 번 가질 수 있기 때문입니다.
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
다른 팁
찾고 있는 문서는 다음과 같습니다.
http://msdn.microsoft.com/en-us/library/ms173157.aspx
그 이유는 이 사건을 처리하기 위해서입니다.
public class C : IA, IB
{
object IA.Method()
{
// Implementation!
}
object IB.Method()
{
// Implementation!
}
}
구현하려는 동일한 시그니처를 가진 두 개의 메소드가 있는 경우 별도의 구현을 제공할 수 있도록 이들을 다르게 만드는 것이 필요합니다.인터페이스의 이름이 이를 제공합니다.
제휴하지 않습니다 StackOverflow