¿Se supone que el uso de global implícito y static funciona en C# 10 / .net 6?
Tengo un proyecto Common con los siguientes 2 usings:
global using global::System.IO;
global using static global::System.Console;
Ambos son visibles dentro del proyecto Common en sí.
Cuando hago referencia al proyecto Common en otro proyecto:
global using global::System.IO;
funciona en el proyecto principal también; sin embargo,
global using static global::System.Console;
no funciona.
¿Por qué no?
PD: Tengo lo siguiente en ambos proyectos.
<ImplicitUsings>enable</ImplicitUsings>
EDICIÓN: Por “no funciona” me refiero a que el método WriteLine no es visible. En Common puedo simplemente escribir “WriteLine”, pero en el proyecto de referencia debo escribir “Console.WriteLine”.
EDICIÓN: La razón por la que pensé que debería ser compatible es debido al siguiente comentario en: https://github.com/dotnet/csharplang/issues/2145
Sugiere que la función propuesta no es necesaria debido a que los using estáticos globales implícitos son posibles.
davy.ai
La razón por la cual
global using static global::System.Console;
no funciona en el proyecto de referencia es porque la directivaglobal using static
está limitada al archivo en el que aparece. Esto significa que, si bien es visible dentro del archivo en el proyecto Common donde se declara, no es visible fuera de ese archivo, incluido en el proyecto de referencia.La configuración
<implicitusings>
permite al compilador agregar automáticamente las directivasusing
para ciertos espacios de nombres sin tener que declararlos explícitamente en el código. Sin embargo, no afecta la visibilidad de las directivasglobal using static
.Vale la pena mencionar que el comentario en el problema de GitHub discute una propuesta de función diferente que permite “declaraciones de uso implícitas”, donde ciertos espacios de nombres se pueden importar automáticamente como si se hubieran declarado con instrucciones
using
. Esto es diferente de las directivasglobal using static
, y parece que el comentario simplemente señala que esta característica propuesta hace que la directivaglobal using static
sea menos necesaria.