402 Stimmen

Was bedeutet "where T : class, new()"?

Können Sie mir bitte erklären, was where T : class, new() in der folgenden Codezeile bedeutet?

void Add(T item) where T : class, new();

13 Stimmen

0 Stimmen

Ist deine Frage damit beantwortet? Was bedeutet new()?

6voto

Evan Mulawski Punkte 53325

Das bedeutet, dass der Typ T eine Klasse sein muss und einen Konstruktor haben muss, der keine Argumente akzeptiert.

Zum Beispiel, du musst in der Lage sein, das Folgende zu tun:

T t = new T();

1 Stimmen

Nicht nur ein Konstruktor, sondern ein Konstruktor, der keine Argumente akzeptiert.

0 Stimmen

@NerdFury: Danke. Das ist ein wichtiger Punkt. Korrigiert.

6voto

Fredrik Widerberg Punkte 3050

where (C# Reference)

Der new() Constraints gibt dem Compiler an, dass ein beliebiges Typargument über einen zugänglichen parameterlosen oder Standardkonstruktor verfügen muss

Also sollte es sein, T muss eine Klasse sein, und über einen zugänglichen parameterlosen oder Standardkonstruktor verfügen.

5voto

Otman IGHOULASSEN Punkte 123

Was nach dem "Where" kommt, ist eine Einschränkung für den generischen Typ T, den Sie deklariert haben, also:

  • Klasse bedeutet, dass T eine Klasse und nicht ein Werttyp oder eine Struktur sein sollte.

  • new() gibt an, dass die T-Klasse einen öffentlichen parameterlosen Standardkonstruktor definiert haben sollte.

2voto

Es wird als 'Einschränkung' auf den allgemeinen Parameter T bezeichnet. Das bedeutet, dass T ein Verweistyp (eine Klasse) sein muss und dass er über einen öffentlichen Standardkonstruktor verfügen muss.

1voto

Peter Lillevold Punkte 32995

Dies ist Teil des Generics-Mechanismus, bei dem das where-Schlüsselwort Einschränkungen hinzufügt, welche Typen implementieren müssen, um als Typparameter verwendet zu werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X