Gegeben das folgende Code-Snippet:
%Vor%Wenn ich das "System" entferne. Vor Int32 in meiner Deklaration für den Alias "Foo" bekomme ich einen Compilerfehler. Trotz der Tatsache, dass ich den System-Namespace am Anfang der Datei verwende, kann der Compiler keinen nicht qualifizierten "Int32" -Typ finden.
Warum ist das so?
Dies liegt daran, dass die C # -Spezifikation besagt, dass es sein muss. Genauer gesagt sagt Abschnitt 9.4.1 in der C # -Spezifikation:
Die Reihenfolge, in der using-alias-directives geschrieben werden, hat keine Bedeutung, und die Auflösung des Namespace-oder-type-Namens, auf den sich eine using-alias-Anweisung bezieht, wird durch die using-alias-Direktive selbst oder durch nicht beeinflusst andere using-Direktiven in der sofort enthaltenen Kompilierungseinheit oder dem Namespace-Text. Mit anderen Worten, der Namespace-oder-Typ-Name einer Alias-Benutzungs-Direktive wird aufgelöst, als ob die sofort enthaltene Kompilierungseinheit oder der Namespace-Rumpf keine using-Direktiven hätte. Eine using-alias-Direktive kann jedoch von extern-alias-Anweisungen in der unmittelbar enthaltenen Kompilierungseinheit oder dem Namespace-Textkörper beeinflusst werden.
Da die Reihenfolge keine Rolle spielt, hat using System;
keine Auswirkung auf die Alias-Anweisung. Der spezifische Abschnitt, der von Bedeutung ist, lautet: " Der Namespace-oder-Typ-Name einer Alias-Benutzungs-Direktive wird aufgelöst, als ob die sofort enthaltene Kompilierungseinheit oder der Namespace-Rumpf keine using-Direktiven " / p>
Weil die Verwendung von Anweisungen nicht in einer bestimmten Reihenfolge verarbeitet wird. Der Compiler weiß nicht, die erste Zeile vor der Sekunde zu verarbeiten.
Die Spezifikation (9.3) lautet:
Der Gültigkeitsbereich einer using-Direktive erstreckt sich über die Namespace-Member-Deklarationen seiner sofort enthaltenen Kompilierungseinheit oder des Namespace-Rumpfs. Der Umfang einer using-Direktive beinhaltet ausdrücklich nicht die Peer-Using-Direktiven. Peer-using-Direktiven beeinflussen sich gegenseitig nicht, und die Reihenfolge, in der sie geschrieben werden, ist unbedeutend.
Verschieben Sie Ihre letzte using
in den Namespace-Block und es wird funktionieren.
Tags und Links c#