Lassen Sie mich ein Beispiel geben:
Ich habe eine generische Klassen- / Schnittstellendefinition:
interface IGenericCar< T > {...}
Ich habe eine andere Klasse / Schnittstelle, die ich mit der obigen Klasse in Beziehung setzen möchte, zum Beispiel:
interface IGarrage< TCar > : where TCar: IGenericCar< (**any type here**) > {...}
Grundsätzlich möchte ich, dass meine generische IGarrage abhängig ist IGenericCar
, unabhängig davon, ob es IGenericCar<int>
oder ist IGenericCar<System.Color>
, da ich keine Abhängigkeit von diesem Typ habe.
quelle
T
in der verwenden mussIGarage<TCar>
? Ich kann in Option2 keine Möglichkeit sehen. Die beste Lösung wäre, wennIGarage<TCar>
der TypT
durch Analysieren des Typs gefunden würdeTCar
.IGarage<IGenericCar<?>>.TellMeAboutCarsInGeneral()
was wahrscheinlich das Ergebnis eines schlechten Designs wäre), aber ich habe es in meinem Basteln getan, und es ist möglich.IGarrage<TCar>
der zugrunde liegende generische Typ tatsächlich behandelt wird (z. B. eine Eigenschaft dieses Typs), muss er den Typ kennen, für den Sie den Typ angeben müssen, bei dem es sich um Option 1 handelt (die einzige realisierbare Option). WennIGarrage<TCar>
der zugrunde liegende generische Typ jedoch nicht direkt behandelt wird (der gesamteIGarrage<TCar>
Code ist unabhängig von diesem zugrunde liegenden Typ), ist Option 2 gültig.Wäre es sinnvoll, etwas zu tun wie:
quelle