2012-09-29 10 views
5

Mam następujący:Jak zdać wieloznacznych w C#

public class Foo<T> : Goo 
    where T: SomeClass<?>, new() 

wiem? nie jest prawdziwym symbolem wieloznacznym w języku C#, jak jednak napisać to poprawnie w języku C# tak, że SomeClass może przyjąć dowolną klasę jako argument? Próbowałem użyć obiektu, ale wtedy pojawi się błąd "... nie ma żadnej niejawnej konwersji odniesienia z ..."

Dzięki!

Odpowiedz

6

Musisz podać drugi argument (np. Y w mojej próbce), zauważ, że Y może być wszystkim, ponieważ nie ma żadnych ograniczeń, nawet takich samych jak T.

public class Foo<T, Y> : Goo 
    where T: SomeClass<Y>, new() 

Inną opcją jest określenie tylko drugą klasę, jeśli wystarczy użyć SomeClass<Y> w generycznej klasy, nie trzeba będzie nowy() ograniczenie ponieważ kompilator wie z góry, że SomeClass<T> mieć domyślnego konstruktora:

public class Foo<Y> : Goo{ 
    public SomeClass<Y> Value; 

    public void Setup() { Value = new SomeClass<Y>(); } 
} 
Powiązane problemy