2009-09-11 7 views
1

인터페이스를 쓰고 있는데 일반 콜렉션을 반환하는 속성을 선언하고 싶습니다. 컬렉션의 요소는 인터페이스를 구현해야합니다. 이것이 가능한지, 만약 그렇다면 구문은 무엇입니까?인터페이스 속성에 제약 조건 추가하기

이것은 컴파일되지 않습니다. 어떻게해야할까요?

interface IHouse 
{ 
    IEnumerable<T> Bedrooms { get; } where T : IRoom 
} 

감사

답변

9

당신은뿐만 아니라 일반적으로 인터페이스를 표시 할 수 있습니다

interface IHouse<T> where T : IRoom 
{ 
    IEnumerable<T> Bedrooms { get; } 
} 
+0

IHouse : 여기서 T : IRoom 또는 IHouse T를 잘 어디? – anishMarokey

+0

@anishmarokey : 예, 코드가 수정되었습니다. –

12

를 사용하는 이유 제네릭을? 그냥 수행하십시오 :

이것은 더 깨끗하고 인터페이스에 이미 제한되어 있으므로 거의 동일하게 작동합니다.

+0

그러나 차이를 지원하지 않으면 구현 클래스가 속성의 값으로 일부 구체적인 'Room'유형에 대해 'List '을 반환하지 못합니다. – kvb

1

일반은 클래스 및 메서드 용이며 속성은 아닙니다. 클래스/인터페이스가 제네릭이면 속성에서 해당 유형을 사용할 수 있습니다. 나는 리드의 해결책에 동의한다.

+0

내가 왜 투표를했는지 궁금합니다. 이 문은 MSDN에서 직접 제공합니다. –

+0

+1 - 나에게 동의하는 것은 아닙니다.) 일반적인 제약 조건은 속성 때문에 작동하지 않습니다. –

+0

@ReedCopsey 그 이유가 무엇인지 듣고 싶습니다. 어쨌든 속성이 메소드로 해결된다는 것을 알고 있습니다. – Marco

2

Microsoft에서이 제한을 추가하기로 한 이유가 없습니다. 후드 속성은 단지 한 쌍의 메서드이고 일반적인 메서드는 이미 지원됩니다.

나는이 제한 몇 번 공격, 그리고 명시 적으로 GET 추가에 의지했고, 대신 방법을 설정 한 :

interface IHouse 
{ 
    IEnumerable<T> GetBedrooms<T>() where T : IRoom; 
}