2012-04-20 2 views
3

명시 적으로 구현 된 인터페이스의 속성은 일반적으로 인터페이스의 전체 이름으로 시작됩니다. 그러나 중첩 된 인터페이스 인 경우 속성 이름은 약간 일치하지 않습니다.인터페이스의 성명과 명시 적으로 구현 된 속성의 차이점

namespace NS 
{ 
    public class Container 
    { 
     //FullName is NS.Container+ITest 
     public interface ITest 
     { 
      int Prop { get; } 
     } 
    } 

    public class Sample : Container.ITest 
    { 
     //Property's name is NS.Container.ITest.Prop 
     int Container.ITest.Prop { get; } 
    } 
} 

왜 속성 이름이 NS.Container+ITest.Prop이 아닌가요? 또는 인터페이스의 이름은 NS.Container.ITest 일 것입니다. 더 정확할 것 같은가요?

+0

코드가 컴파일되지 않습니다. – SLaks

+0

@SLaks 감사합니다. – lorond

+2

@Lorond : 이제 귀하의 질문을 볼 수 없습니다. – SLaks

답변

2

CLR이 생성하는 형식 이름은 C# 언어의 명명 규칙과 일치하지 않습니다. 표준 예제는 List<int>이고 CLR 형식 이름은 List'1 (backquote)입니다. NS.Container + ITest가 유효하지 않은 것처럼 C#에서 유효한 유형 식별자가 아닙니다.

C# 코드에서 C# 명명 규칙을 사용해야합니다.

+0

이름 지정 규칙과 일치하지 않는다는 것을 알고 있습니다. 그 사건에 대한 다른 명명 규칙이 있는지 궁금합니다. 'NS.Container + ITest'에서'+'와 마찬가지로'ITest'는'Container'라는 이름의 클래스 또는 구조체에 속합니다. 또는 개인 속성'NS.ITest.Prop'은 인터페이스 'NS.ITest'에 대한'Prop' 속성의 명시 적 구현임을 알려줍니다. 반사 목적으로 사용하기위한 것입니다. 나는 내 코드에서 그런 이름을 사용하는 것을 생각하지 않는다. :) – lorond

+1

C# 컴파일러 자체에서 코드에 명시 적으로 생성되지 않은 형식을 생성하는 이름을 포함하여 그 중 많은 것이 있습니다. lamdas 및 iterators처럼. 그 (것)들을 전부 목록으로 만드는 것은 시간의 낭비에 보인다, 나가 1 개를 잘 놓칠지도 모른다 확률을 주어. 나는 그 질문의 요지를 실제로 얻지 못한다고 나는 생각한다. –

+0

인터페이스 이름 ('NS.Container + ITest')에있는 것처럼'+'대신 속성 이름'NS.Container.ITest.Prop'에'.'가 있습니다. 나는 재산에 대한 NS.Container + ITest.Prop 이름이 예상되었고 조금 다른 점에 놀랐다. – lorond

0

NS.Container+ITest이 ITest가 NS.Container에서 중첩 된 클래스라고 나타내면 NS.Container+ITest.Prop이 인터페이스의 멤버가됩니다. 그러나 구현의NS.Container.ITest.Prop과 일치하는 Sample (명시 적으로 인터페이스를 구현)의 구성원입니다. 인터페이스 구성원에 액세스하려고 시도 할 수 없으므로 구현과 일치하는 이름을 확인하는 것이 합리적입니다.

+0

Prop의 Sample 멤버가 해당 이름과 일치하는 이유는 논리가 표시되지 않습니다. 일반적으로 명시 적으로 구현 된 멤버의 이름이 인터페이스의 이름과 일치합니다. – lorond

관련 문제