Warum unterscheidet der C # -Compiler zwischen diesen beiden Fällen?

8

Wenn Sie eine Eigenschaft haben, die wie folgt aussieht:

%Vor%

kompilieren und später ändern Sie es zu:

%Vor%

Es sieht so aus, als ob der kompilierte Code zwischen den beiden Assemblys unterschiedlich ist, was ich mit dem Reflector sehen konnte.

Warum unterscheidet der Compiler zwischen den beiden Codes? Ist es nicht nur notwendig zu sehen, ob es einen mehrdeutigen Typ zur Kompilierzeit gibt und falls nicht, muss der kompilierte Code für beide identisch sein? Ich würde den kompilierten Code annehmen, um voll qualifizierte Namen für jedes Mitglied zu jeder Zeit zu verwenden.

    
Joan Venge 27.01.2011, 22:35
quelle

2 Antworten

7

Ich kann das nicht reproduzieren. Beispielcode:

%Vor%

Die generierte IL für die zwei Eigenschaften ist genau gleich und sie sehen im Reflektor gleich aus.

Meine Annahme ist, dass Sie tatsächlich eine andere Klasse namens Vector3 im Namespace "global" (oder in einem anderen Namespace, für den Sie eine using-Direktive verwenden) erhalten haben.

Versuchen Sie, den Mauszeiger über beide Namen in Visual Studio zu bewegen und zu sehen, was sie zeigen.

    
Jon Skeet 27.01.2011, 22:43
quelle
2

Hier ist ein Beispiel, dass die Ergebnisse, die Sie beobachten, erzeugt. Hoffentlich klärt das auf, was du fragst. Angenommen, Sie haben

  • eine separate Bibliothek mit dem Typ Vector3 in einem Namespace Algebra ;

  • die folgenden Dateien in Ihrem Projekt:

Datei ①

%Vor%

Datei ②

%Vor%     
Timwi 27.01.2011 23:11
quelle

Tags und Links