Ogólne dziedziczone ograniczenie typu w C #
Mam nieeleganckie rozwiązanie tego, czego potrzebuję, ale szukam eleganckiego rozwiązania, aby je zastąpić.
Poniższy kod nie kompiluje się, ale reprezentuje to, co chciałbym zrobić:
<code>interface IWebService { } abstract class BaseClient<T> { } class SpecializedClient : BaseClient<IWebService> { } class ClientHelper<T> where T : BaseClient<*> { } </code>
GdzieT
wClientHelper<T>
to każda klasa, która się rozszerzaBaseClient
niezależnie od przekazanego typu szablonu.
Nieeleganckie rozwiązanie, które znalazłem to:
<code>class ClientHelper<T, U> where T : BaseClient<U> {} </code>
Powodem, dla którego staje się nieelegancki, jest to, że mój projekt kończy się klasą podobną do:
<code>class MyClass<A, B, C, D, E, F, G> where A : MyBaseClass<B, C, D, E, F, G> </code>
Aż do klasy bazowej, która ma pojedynczy typ. Czy jest to po prostu koszt posiadania złożonego drzewa dziedziczenia klas ogólnych, czy też jest to prostszy sposób, zachowując ograniczenia typów dla typów szablonów?