Esto se debe a que la especificación C# dice que debe ser. Más específicamente, la sección 9.4.1 de la especificación de C# dice:
El orden en el que utilizando-alias-directivas se escriben no tiene ningún significado, y la resolución del espacio de nombres o nombre-tipo-referenciado por un using- alias-directive no se ve afectada por la directiva de uso de alias o por otras directivas de uso en la unidad de compilación o el cuerpo de espacio de nombres que contiene inmediatamente. En otras palabras, el espacio de nombre o nombre de tipo de una directiva de uso de alias se resuelve como si la unidad de compilación que lo contenía inmediatamente o el cuerpo del espacio de nombres no tuvieran instrucciones de uso. Sin embargo, una directiva using-alias puede verse afectada por las directivas extern-alias en la unidad de compilación o el cuerpo del espacio de nombres que contiene inmediatamente.
Dado que el orden no importa, el using System;
no tiene ningún efecto en la directiva using-alias-directive. La sección específica que importa es: "el espacio de nombres o nombre de tipo de una directiva de uso de alias se resuelve como si la unidad de compilación que contiene inmediatamente o el cuerpo del espacio de nombres no tuviera instrucciones de uso".
No son "tipos" fuera de un espacio de nombres. Solo se usa declaraciones de alias. 'class Program {static void Main (String [] args) {Int32 x = 0; }} 'fuera de un bloque de espacio de nombres funciona bien. –