인터페이스를 쓰고 있는데 일반 콜렉션을 반환하는 속성을 선언하고 싶습니다. 컬렉션의 요소는 인터페이스를 구현해야합니다. 이것이 가능한지, 만약 그렇다면 구문은 무엇입니까?인터페이스 속성에 제약 조건 추가하기
이것은 컴파일되지 않습니다. 어떻게해야할까요?
interface IHouse
{
IEnumerable<T> Bedrooms { get; } where T : IRoom
}
감사
인터페이스를 쓰고 있는데 일반 콜렉션을 반환하는 속성을 선언하고 싶습니다. 컬렉션의 요소는 인터페이스를 구현해야합니다. 이것이 가능한지, 만약 그렇다면 구문은 무엇입니까?인터페이스 속성에 제약 조건 추가하기
이것은 컴파일되지 않습니다. 어떻게해야할까요?
interface IHouse
{
IEnumerable<T> Bedrooms { get; } where T : IRoom
}
감사
당신은뿐만 아니라 일반적으로 인터페이스를 표시 할 수 있습니다
interface IHouse<T> where T : IRoom
{
IEnumerable<T> Bedrooms { get; }
}
를 사용하는 이유 제네릭을? 그냥 수행하십시오 :
이것은 더 깨끗하고 인터페이스에 이미 제한되어 있으므로 거의 동일하게 작동합니다.
그러나 차이를 지원하지 않으면 구현 클래스가 속성의 값으로 일부 구체적인 'Room'유형에 대해 'List
일반은 클래스 및 메서드 용이며 속성은 아닙니다. 클래스/인터페이스가 제네릭이면 속성에서 해당 유형을 사용할 수 있습니다. 나는 리드의 해결책에 동의한다.
내가 왜 투표를했는지 궁금합니다. 이 문은 MSDN에서 직접 제공합니다. –
+1 - 나에게 동의하는 것은 아닙니다.) 일반적인 제약 조건은 속성 때문에 작동하지 않습니다. –
@ReedCopsey 그 이유가 무엇인지 듣고 싶습니다. 어쨌든 속성이 메소드로 해결된다는 것을 알고 있습니다. – Marco
Microsoft에서이 제한을 추가하기로 한 이유가 없습니다. 후드 속성은 단지 한 쌍의 메서드이고 일반적인 메서드는 이미 지원됩니다.
나는이 제한 몇 번 공격, 그리고 명시 적으로 GET 추가에 의지했고, 대신 방법을 설정 한 :
interface IHouse
{
IEnumerable<T> GetBedrooms<T>() where T : IRoom;
}
IHouse : 여기서 T : IRoom 또는 IHouse T를 잘 어디? –
anishMarokey
@anishmarokey : 예, 코드가 수정되었습니다. –