Geben Sie eine allgemeine C # -Anforderung an, die ClassA oder ClassB entspricht?

8

Gibt es eine Möglichkeit anzugeben, dass ein generischer Typ vom Typ oder anderer Typ ist?

%Vor%     
Scott 15.01.2010, 19:25
quelle

6 Antworten

8
Nein, weil das keinen Sinn ergeben würde. Wenn Sie versuchen, auf eine Memberfunktion von "T" zuzugreifen, wie kann der Compiler angeben, welche Basisklasse versuchen soll, Mitglieder von? Zu lösen?

Sie könnten versuchen, eine gemeinsame Schnittstelle für TypeOne und TypeTwo zu erstellen, und die Einschränkung würde diese Schnittstelle angeben? Was versuchst du genau zu erreichen?

    
Sapph 15.01.2010, 19:27
quelle
3

Sie können nicht. Das Beste, was Sie tun können, ist die Verwendung einer gemeinsamen Basisklasse für die beiden oder einer gemeinsamen Schnittstelle, die von beiden als eine einzige Typabhängigkeit implementiert wird.

    
David M 15.01.2010 19:26
quelle
2

Nein, Sie könnten die Klasse jedoch auf eine gemeinsame Basis oder Schnittstelle beschränken.

In der CLR selbst werden die Constraints (außer speziellen, wie die new-Constraint) ziemlich einfach gespeichert: nur eine Liste von Typ-Identifiern, im Grunde. Also gibt es wirklich keinen "Raum" für logische Operationen, wie Sie es spezifiziert haben ... nicht ohne eine Überarbeitung der CLR-Spezifikation oder vielleicht einige wirklich schlaue und hässliche Tricks auf Sprachniveau.

    
Josh Petrie 15.01.2010 19:26
quelle
2

Sie können die allgemeine Funktionalität von TypeOne und TypeTwo in eine Basisklasse oder Schnittstelle extrahieren und diese Basisklasse oder Schnittstelle als Einschränkung verwenden. Wie würde der Compiler andernfalls wissen, was er mit T machen kann?

%Vor%     
John Saunders 15.01.2010 19:26
quelle
2

Sie könnten immer eine Laufzeitprüfung gegen den Typ durchführen:

%Vor%     
mlsteeves 15.01.2010 19:47
quelle
0

Sie könnten TypeOne und TypeTwo eine Schnittstelle erben lassen und dann folgendes tun:

%Vor%     
Khalid Abuhakmeh 15.01.2010 19:27
quelle

Tags und Links