Ich frage mich, ob es sinnvoll ist, sowohl "Klasse" und "neue()" Einschränkungen beim Definieren einer generischen Klasse zu haben. Wie in dem folgenden Beispiel:Ist es sinnlos, in einer generischen Klasse sowohl "class" als auch "new()" zu haben?
class MyParanoidClass<T> where T : class, new()
{
//content
}
angeben Beide Randbedingungen, dass T ein Referenztyp sein sollte. Während die Einschränkung "class" nicht impliziert, dass ein impliziter Konstruktor existiert, erfordert die Einschränkung "new()" eine "class" mit einer zusätzlichen öffentlichen Konstruktordefinition.
Meine letzte (Formulierung für die) Frage ist: habe ich irgendwelche Vorteile von der Definition einer generischen Klasse wie in der obigen Anweisung, oder "new()" kapselt beide Einschränkungen?
Ich glaube nicht, dass 'new()' einen Referenztyp erzwingt, nur einen öffentlichen parameterlosen Konstruktor, den Werttypen haben können (aber ich denke, sie haben dies sowieso als Werttypen, so dass es sinnlos ist). –
@AdamHouldsworth: Werttypen * immer * haben einen öffentlichen parameterlosen Konstruktor. Und es ist nicht sinnlos, weil die Bedingung 'new()' dem Code innerhalb der Klasse erlaubt, eine neue Instanz von 'T' über' new T() 'zu erzeugen. Dies ist nicht möglich, wenn die Einschränkung weggelassen wird. –
@DanielHilgarth Ja, ich fahre fort, das zu sagen, aber fair genug auf das sinnlose bisschen. Dies ist jedoch wahrscheinlich dasselbe wie "Standard (T)". –