Greifen Sie auf eine statische Eigenschaft einer generischen Klasse zu?

7

Ich verwende Height für alle Foo s Mitglieder. So,

%Vor%

Die gleiche Situation ist in VB.NET.

    
serhio 24.02.2010, 14:50
quelle

3 Antworten

13

Sie müssten einen generischen Typparameter eingeben. Davon abgesehen verwende ich manchmal ein Vererbungsschema, um diese Funktionalität zu erhalten, ohne den generischen Typparameter eingeben zu müssen.

%Vor%

Damit behalten Sie die gleiche FoosHeight, unabhängig von dem generischen Typparameter, der in Foo<T> übergeben wurde. Wenn Sie für jede Version von Foo<T> einen anderen Wert wünschen, müssen Sie einen Typ auswählen, der in diesen Typparameter eingefügt werden soll, und das Vererbungsschema vergessen.

    
David Morton 24.02.2010, 14:53
quelle
7

Sie müssen einen Typ angeben, z. B.

%Vor%

oder

%Vor%

aber jeder ist getrennt. Foo<int>.FoosHeight ist nicht verwandt mit Foo<Bar>.FoosHeight . Sie sind effektiv zwei getrennte Klassen mit zwei verschiedenen statischen Feldern. Wenn Sie möchten, dass der Wert für alle Foo & lt; & gt; dann brauchst du einen separaten Platz um es zu speichern wie

%Vor%

Und FooHelper hat keine formale Beziehung zu Foo

    
Samuel Neff 24.02.2010 14:53
quelle
2

Jedes spezifische generische Element ist ein eigener Typ und hat daher eine eigene statische Variable. Ein Foo<int> hätte also ein anderes Mitglied der statischen Höhe als ein Foo<string> . Wenn Sie das für alle spezifischen Foo<T> -Typen freigeben möchten, müssen Sie dies woanders implementieren.

Wenn Sie wirklich nur den Wert für einen Foo<object> -Typ festlegen möchten, dann ist es nur das: Foo<object> .

    
Joel Coehoorn 24.02.2010 14:53
quelle

Tags und Links