2012-04-15 2 views
0

가능한 중복 :
Why Explicit Implementation of a Interface can not be public?명시 적으로 구현 된 구성원을 공개 할 수없는 이유는 무엇입니까?

I read this Question. 직선 질문에서

interface IRepository<T> 
{ 
    void AddString(); 
} 

interface IStringRepo : IRepository<string> 
{ 
    List<string> GetStrings(); 
} 

public class BLL : IStringRepo 
{ 
    public List<string> FilterStrings() 
    { 
     return new List<string>() { "Hello", "World" }; 
    } 

    public List<string> IStringRepo.GetStrings() 
    { 
     throw new NotImplementedException(); 
    } 

    public void IRepository<string>.AddString() 
    { 
     throw new NotImplementedException(); 
    } 
} 

이유는 명시 적으로 언급 된 멤버 공개는 Error입니다 만드는 무엇입니까?

+2

'public' 수정자가 무엇을 기대합니까? 보통 메서드 이름이 없기 때문에 적어도 일반 C# 코드에서이 메서드를 인터페이스를 통해서만 호출 할 수 있습니다. – CodesInChaos

+1

언어 사양에 그렇게 나와 있기 때문에. – Jon

+0

명시 적 인터페이스 구현'public'을 만들 수 있다면, 그 정상 (암시 적) 인터페이스 구현의 차이점은 무엇입니까? – svick

답변

1

이유는 명시 적으로 언급 된 멤버를 공개하고 않고, 그냥 명시 적으로 인터페이스를 구현하는 개발자를 강제로 가장 인기있는 이유 중 하나 상상이 의도적으로 설계된 오류

입니다 : 일원이 이름 모호성이이므로 이미 공용 멤버를 일부 이름으로 노출 한 기존 클래스가 있으므로 기존 클래스 API를 다른 시스템에서 사용하기 때문에 인터페이스 API (멤버 이름/서명)를 변경할 수 없으므로 기존 클래스 API를 변경할 수 없습니다. 클래스와 인터페이스 모두 동일한 이름의 멤버를 정의하므로 0을 제공합니다.클래스에서 동일한 이름의 멤버가 이미 선언되었으므로 인터페이스 멤버에 대한 acces 수정자가 의미가 없습니다.

MSDN, 13.4.1 Explicit interface member implementations

방법 호출, 속성 액세스 또는 인덱서 액세스의 정규화 된 이름을 통해 명시 적 인터페이스 멤버 구현에 액세스 할 수 없습니다. 명시 적 인터페이스 멤버 구현은 인터페이스 인스턴스를 통해서만 액세스 할 수 있으며,이 경우 멤버 이름으로 간단히 참조됩니다.

명시 적 인터페이스 멤버 구현에서 액세스 한정자를 포함하는 컴파일 타임 오류이며 추상, 가상, 재정의 또는 정적 수정자를 포함하는 것은 컴파일시 오류입니다.명시 적 또는 암시 - 그들은 공개하지 않습니다 그래서 일종의

당신의 충돌이기 때문에

-1

다른 선택의 여지 다음, 공공 등의 모든 멤버를 구현해야 함과 계약을 체결함으로써, public 원인을 만드는 더 어떤 이유로 없습니다.

하지만 오류가 있습니까?

왜냐하면 모든 인터페이스 구성원은 정의에 의해 공개되기 때문입니다.

Interfaces

인터페이스 방법, 특성, 이벤트, 인덱서 또는 그 4 개 부재 유형의 조합으로 구성된다. 인터페이스에는 상수, 필드, 연산자, 인스턴스 생성자, 소멸자 또는 유형을 포함 할 수 없습니다. 정적 구성원은 포함 할 수 없습니다. 인터페이스 구성원은 으로 자동 공개되며 액세스 수정자를 포함 할 수 없습니다.

+0

@downvoter : 설명해 주시겠습니까? – Tigran

+0

@downvoter : 그냥 열정을 설명하거나, 곧 또는 왜 당신 downvoting거야? – Tigran

0

중 하나의 방법을 구현하는 choice 있습니다.

구현 자에만 인터페이스를 통해 (간체) 대중을 숨길 수있는 방법에 액세스하도록 강요하고 싶어하기 때문에 종종
있어 명시하는 경우 - 따라서 공공 아니다.

간단히 말해서 명시 적 구현의 목적 중 하나입니다.

관련 문제