In C ++ - Vorlagen kann angegeben werden, dass ein bestimmter Typparameter ein Standard ist. Das heißt, wenn nicht ausdrücklich angegeben, wird Typ T verwendet.
Kann dies in C # durchgeführt oder angenähert werden?
Ich suche so etwas wie:
public class MyTemplate<T1, T2=string> {}
Damit eine Instanz des Typs, die nicht explizit angibt T2
:
MyTemplate<int> t = new MyTemplate<int>();
Wäre im Wesentlichen:
MyTemplate<int, string> t = new MyTemplate<int, string>();
Letztendlich betrachte ich einen Fall, in dem es eine Vorlage gibt, die ziemlich weit verbreitet ist, aber ich denke darüber nach, sie um einen zusätzlichen Typparameter zu erweitern. Ich könnte eine Unterklasse bilden, aber ich war neugierig, ob es in diesem Sinne andere Optionen gibt.
overloadable
nach Parameteranzahl.Eine Lösung ist die Unterklasse. Eine andere, die ich stattdessen verwenden würde, sind Factory-Methoden (kombiniert mit dem Schlüsselwort var).
Im obigen Beispiel
val2
handelt es sich um einen TypMyTemplate<int,string>
und nicht um einen davon abgeleiteten Typ.Ein Typ
class MyStringTemplate<T>:MyTemplate<T,string>
ist nicht der gleiche Typ wieMyTemplate<T,string>
. Dies kann in bestimmten Szenarien zu Problemen führen. Zum Beispiel können Sie keine Instanz vonMyTemplate<T,string>
to umwandelnMyStringTemplate<T>
.quelle
Sie können auch eine solche Klassenüberladung erstellen
quelle
MyTemplate<T1>
ist eine andere Klasse alsMyTemplate<T1, T2>
keineAnotherTemplate<T1>
.MyTemplate<T1, string>
nicht zugewiesen werden kannMyTemplate<T1>
, was wünschenswert sein kannC # unterstützt eine solche Funktion nicht.
Wie Sie sagten, können Sie es in Unterklassen unterteilen (wenn es nicht versiegelt ist und alle Konstruktordeklarationen duplizieren), aber es ist eine ganz andere Sache.
quelle
Leider unterstützt C # nicht, was Sie versuchen zu tun. Die Implementierung wäre schwierig, da der Standardtyp für einen Parameter die allgemeinen Einschränkungen einhalten müsste und höchstwahrscheinlich Kopfschmerzen verursachen würde, wenn die CLR versuchte, die Typensicherheit zu gewährleisten.
quelle