Dzieje się tak, ponieważ specyfikacja C# mówi, że tak być musi. Dokładniej, sekcja 9.4.1 w specyfikacji C# mówi:
Kolejność, w jakiej using-alias-dyrektyw są napisane nie ma znaczenia, a rozdzielczość-or-nazwa-typu przestrzeni nazw odwołuje się using- alias-dyrektywa nie jest zależna od samej dyrektywy-używania-alias ani od innych dyrektyw-użytkowych w bezpośrednio zawierającej jednostkę kompilacji lub treść przestrzeni nazw. Innymi słowy, nazwa przestrzeni nazw lub typu dyrektywy aliasów użycia jest rozwiązywana tak, jakby natychmiast zawierająca jednostkę kompilacji lub treść przestrzeni nazw nie miała żadnych dyrektyw użycia. Na dyrektywę alias-użytkowanie mogą mieć wpływ dyrektywy zewnętrzne-alias w bezpośrednio zawierającej jednostkę kompilacji lub treść przestrzeni nazw.
Ponieważ zamówienie nie ma znaczenia, using System;
nie ma wpływu na dyrektywę aliasów użytkowania. Szczególna sekcja, która ma znaczenie, jest następująca: "nazwa przestrzeni nazw lub typu dyrektywy aliasów użycia jest rozwiązana tak, jakby natychmiast zawierająca jednostkę kompilacji lub treść przestrzeni nazw nie miała żadnych dyrektyw" ".
Nie jest to "typ" poza obszarem nazw. To tylko przy użyciu deklaracji aliasów. 'class Program {static void Main (String [] args) {Int32 x = 0; }} 'poza blokiem przestrzeni nazw działa dobrze. –