program tip

인터페이스의 명시 적 구현이 공개 될 수없는 이유는 무엇입니까?

radiobox 2020. 11. 2. 07:49
반응형

인터페이스의 명시 적 구현이 공개 될 수없는 이유는 무엇입니까?


인터페이스 구현 인 클래스에 메서드가 있습니다. 명시 적 구현을 ​​만들었을 때 컴파일러 오류가 발생했습니다.

The modifier 'public' is not valid for this item

public명시 적 인터페이스 구현에 허용되지 않는 이유는 무엇 입니까?


명시 적 인터페이스 구현의 이유는 객체가 해당 메서드를 호출하기 전에 명시 적으로 해당 인터페이스로 캐스팅되어야하기 때문에 최종 결과와 이름 충돌을 방지하기위한 것입니다.

이러한 메서드는 클래스에서 공용이 아니라 인터페이스에 직접 연결되어 있다고 생각할 수 있습니다. 공용 / 개인 / 보호를 지정할 이유가 없습니다. 인터페이스는 공용이 아닌 멤버를 가질 수 없으므로 항상 공용이됩니다.

(Microsoft는 명시 적 인터페이스 구현에 대한 개요를 제공합니다. )


명시 적 멤버 구현은 동일한 서명을 가진 인터페이스 멤버의 명확성을 허용합니다.

명시적인 인터페이스 멤버 구현이 없으면 클래스 또는 구조가 동일한 서명 및 반환 유형을 가진 인터페이스 멤버의 다른 구현을 가질 수 없습니다.

인터페이스의 명시 적 구현이 공개 될 수없는 이유는 무엇입니까? 멤버가 명시 적으로 구현되면 클래스 인스턴스를 통해 액세스 할 수없고 인터페이스의 인스턴스를 통해서만 액세스 할 수 있습니다.

public interface IPrinter
{
   void Print();
}
public interface IScreen
{
   void Print();
}

public class Document : IScreen,IPrinter
{
    void IScreen.Print() { ...}
    void IPrinter.Print() { ...} 
}

.....
Document d=new Document();
IScreen i=d;
IPrinter p=d;
i.Print();
p.Print();
.....

Explict 인터페이스 멤버 구현은 클래스 또는 구조체 인스턴스를 통해 액세스 할 수 없습니다.

참고 URL : https://stackoverflow.com/questions/1253266/why-explicit-implementation-of-a-interface-can-not-be-public

반응형