2017-11-25 17 views
0

인터페이스를 생성 중입니다. 다음과 같이 말합니다.내부 속성이있는 인터페이스

internal interface MyInterface 
{ 
    string Prop { get; } 
} 

이것은 내부 인터페이스입니다. 프로젝트 내에서 이것을 사용하기 위해 들여 쓰기를하고 공개적으로 Prop을 공개하고 싶지는 않습니다. 그러나이 인터페이스를 클래스에 구현하려고하면 Prop 속성을 공개해야합니다. 왜 인터페이스 자체가 내부이고 내부에서만 사용할 수있을 때이 속성을 public으로 만들어야하는지 이해할 수 없습니다.

+0

클래스 내부에 인터페이스를 배치하십시오. 수업 외의 수업을 퍼블리시하면 수업이 공개됩니다. – jdweng

+0

@jdweng 작동하지 않습니다. 어디에 놓여 있든 상관없이 여전히 정적 인 것입니다. –

답변

3

인터페이스 자체는 개체에 대한 공개 기능의 계약 일 뿐이므로 비공개가 아닌 것은 실제로 거기에 속하지 않지만 구현 유형을 대신 사용할 수 있습니다.

그러나 근본적으로 문제는 아닙니다. 유형이 인 경우 internal 인 경우 유형의 모든 속성은 해당 범위 외부에서 볼 수 없습니다. 그들이 어떻게 될 수 있었기 때문에? 유형 자체는 해당 범위를 벗어난 것으로 알려져 있지 않습니다. (MyInterface이 무엇인지 모르는 코드는 MyInterface.Prop이 무엇인지 알지 못합니다.)

속성은 소비 코드에서 볼 수 있다는 점에서 public입니다. 그러나 이것은 처음에는 해당 유형을 사용할 수있는 코드에만 해당되며 해당 어셈블리에 대해서만 internal입니다.

+0

'MyInterface.Prop'이 범위 밖에 표시되지 않고 필요한 것입니다. 그러나 그것이 고려되고있는 가운데, 어쨌든 그 범위 밖에서 사용할 수 없을 때 그 속성을 공개해야하는 이유는 무엇입니까? –

+0

@NevilleNazerane : 인터페이스는 public-facing 기능의 정의이기 때문에. 인터페이스 * 자체는 사물의 가시성을 정의하지 않는다. 모든 것이 공개이기 때문입니다. 하나의 구현 유형이 속성을 'public'으로 표시하고 다른 하나를 'protected'로 표시하면 어떻게됩니까? 두 번째 인터페이스는 실제로 인터페이스를 구현하지 않습니다. 컴파일러는 그것을 허용 할 수 없습니다. – David