반응형
인터페이스의 명시 적 구현이 공개 될 수없는 이유는 무엇입니까?
인터페이스 구현 인 클래스에 메서드가 있습니다. 명시 적 구현을 만들었을 때 컴파일러 오류가 발생했습니다.
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 인터페이스 멤버 구현은 클래스 또는 구조체 인스턴스를 통해 액세스 할 수 없습니다.
반응형
'program tip' 카테고리의 다른 글
Python에서 QR 코드 이미지를 디코딩하는 방법은 무엇입니까? (0) | 2020.11.02 |
---|---|
PHP DateTime 마이크로 초는 항상 0을 반환합니다. (0) | 2020.11.02 |
ASP.NET MVC : 숨겨진 필드 값은 HtmlHelper.Hidden을 사용하여 렌더링되지 않습니다. (0) | 2020.11.02 |
Java는 클래스와 동일합니다. (0) | 2020.11.02 |
사용자 지정 실행 파일 또는 스크립트를 넣을 Unix 표준 디렉토리? (0) | 2020.11.02 |