추상 제네릭 컬렉션 클래스의 파생 인스턴스를 만드는 팩터 리 메서드를 작성하려고합니다. 여기에 기본 클래스 ...팩토리 메서드에서 상속 된 제네릭 컬렉션을 만드는 방법
abstract class ItemBase { }
abstract class CollectionBase<T> : Collection<T> where T : ItemBase, new() { }
... 그리고 자신의 파생 클래스 ...
class Item : ItemBase { }
class ItemCollection : CollectionBase<Item> {}
가 나는 ItemCollection를 생성하는 팩토리 메소드를 원하는 지금이다. 그러나 Item 클래스와 ItemCollection 파생 클래스는이 팩토리 메서드가 포함 된 클래스에서 알 수 없습니다. 이 ... 나는 그것이 있어야 상상하는 방법
static T CreateItemCollection<T>() where T : CollectionBase<ItemBase>, new()
{
return new T();
}
... 그리고 나는
var collection = CreateItemCollection<ItemCollection>();
... 따라서 호출 상상하지만 ItemBase가 있어야하기 때문에 팩토리 메소드가 컴파일되지 않습니다 매개 변수없는 생성자. 그리고 부름 전화는 ItemCollection
이 CollectionBase<ItemBase>
에서 파생되었다고 믿지 않습니다.
누군가 올바른 방향으로 나를 가리킬 수 있습니까? 감사.
감사합니다. 컴파일러가 왜 그렇게 엄격한 주장을하는지 완전히 이해할 수 없더라도 (JaredPar에 의해 아래 주석을 달았습니다.) 이것은 내 문제를 해결합니다. –
@Tim : 내가 말했듯이,'ItemCollection' *은'CollectionBase'와 같은 모든 호출을 허용해서는 안됩니다. 자세한 내용은 Eric Lippert의 블로그 시리즈에서 차이점을 읽어보십시오. 불행히도 지금 당장 실행해야하므로 링크를 추적 할 시간이 없어야합니다. –