es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual global using static global::System.Console; no funciona en el proyecto de referencia es porque la directiva global 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 directivas using para ciertos espacios de nombres sin tener que declararlos explícitamente en el código. Sin embargo, no afecta la visibilidad de las directivas global 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 directivas global using static, y parece que el comentario simplemente señala que esta característica propuesta hace que la directiva global using static sea menos necesaria.

Comments are closed.