2014-05-20 3 views
0
internal interface ICommand 
{ 
    // some methods... 
} 

public interface IProject 
{ 
    // some other methods... 

    ICommand Command { get; set; } 
} 

충분히 명확하다고 생각합니다. 컴파일러는 접근성 때문에 이것을 허용하지 않습니다. 그것을 할 방법이 있습니까? 아니면 구조를 변경해야합니까?공개 인터페이스의 내부 인터페이스 구현

+0

왜 하시겠습니까? 유스 케이스를 이해하는 데 도움이된다면 훨씬 나은 대안을 제시 할 수 있습니다. – jgauffin

+0

@jgauffin 그는 단지 그렇게 그것을 원한다! !! –

+0

@ ToanNguyen 오늘 장난 꾸러기 약을 먹은 것 같습니다. – jgauffin

답변

0

인터페이스의 모든 구성원은 액세스 가능성이 동일하거나 인터페이스 자체보다 덜 제한적이어야합니다. 따라서 공용 인터페이스에는 내부 유형을 사용할 수 없습니다.

그러나 수행 할 수있는 것은 에서 파생 된 인터페이스가 부모보다 더 제한적이고 파생 인터페이스에 내부 구성원이 포함될 수 있습니다.

internal interface ICommand 
{ 
    // some methods... 
} 

public interface IProject 
{ 
    // some other methods... 
} 

internal interface IProjectWithCommands : IProject 
{ 
    ICommand Command { get; set; } 
} 
+0

내 문제를 해결할 수있는 최선의 방법이라고 생각합니다. 감사. –

0

당신은 그것을 만들 수 있습니다 그것에 접근 수정을 허용 것이다 abstract class .. : 이것은 접근의 일부를 제어하면서 여전히 계약을 적용 할 수 있습니다

internal interface ICommand 
{ 
    // some methods... 
} 

public abstract class Project 
{ 
    // some other methods... 

    internal ICommand Command { get; set; } 
} 

. 그러나 이것은 상속 능력을 깨뜨릴 수 있으므로 귀하에게 적합하지 않을 수도 있습니다.

+0

귀하의 조언에 감사드립니다. 그러나 인터페이스에서 추상 클래스로 변경할 수는 없습니다. –

+0

_ "구조를 변경해야합니까?"_ 이런 종류의 일을 할 수 있다는 암시가 있습니다 .. –

+0

'Abstract' 클래스를 선택했기 때문에'Command''''''''를 속성으로 만들려고했는지 궁금합니다. 왜냐하면 지금은 정적이고 가상이 아닌 자동으로 생성 된 속성 ("보이지 않는"배경 필드 포함)이기 때문에 상속자는 구현을 변경할 수 없습니다 (또는 배경 필드 제거). –

관련 문제