'Lexikalisches' Scoping von Typparametern in C #

8

Ich habe 2 Szenarien.

Dies schlägt fehl:

%Vor%

Fehler CS0102: Der Typ ' F<X> ' enthält bereits eine Definition für ' X '

Das funktioniert:

%Vor%

Die einzige logische Erklärung ist, dass der Typparameter X im zweiten Snippet außerhalb des Gültigkeitsbereichs liegt, was nicht wahr ist ...

Warum sollte ein Typparameter meine Definitionen in einem Typ beeinflussen?

IMO, aus Gründen der Konsistenz sollten beide funktionieren oder keiner von beiden sollte funktionieren.

Irgendwelche anderen Ideen?

PS: Ich nenne es "lexikalisch", aber es ist wahrscheinlich nicht der richtige Begriff.

Aktualisierung:

Laut Henks Antwort ist hier eine nicht-generische Version, die das gleiche Verhalten zeigt, aber vielleicht einfacher zu ranken ist.

schlägt fehl:

%Vor%

funktioniert:

%Vor%

Nach dem, was ich sehen kann, erstellt der C # -Compiler einen lexikalischen Bereich bei Typdefinitionsgrenzen.

Es bedeutet auch, dass Typen und Mitgliedsnamen am gleichen 'Ort' leben (oder namespace in Bezug auf LISP).

    
leppie 13.05.2010, 08:32
quelle

2 Antworten

3

Die Klasse G führt einen eindeutigen Namensumfang ein. Wenn Sie die Standardregeln weglassen, werden die beiden Versionen zu:

%Vor%     
Henk Holterman 13.05.2010, 09:00
quelle
2

X ist als ein Typ im Bereich von F definiert. Es ist ähnlich dem:

%Vor%

F.X ist in G nicht außerhalb des Bereichs, aber dies verhindert nicht, dass G eine neue X definiert.

    
Marcelo Cantos 13.05.2010 08:44
quelle