¿Cómo uso la función C # 6 “Using static”?

Echaré un vistazo a algunas de las nuevas funciones en C # 6, específicamente, “usando estática” .

using static es un nuevo tipo de cláusula de uso que le permite importar miembros estáticos de tipos directamente en el scope.
(Parte inferior de la publicación del blog)

La idea es la siguiente, de acuerdo con un par de tutoriales que encontré,
En lugar de:

using System; class Program { static void Main() { Console.WriteLine("Hello world!"); Console.WriteLine("Another message"); } } 

Puede omitir la instrucción de Console repetida, utilizando la nueva característica C # 6 de usar clases estáticas:

 using System.Console; // ^ `.Console` added. class Program { static void Main() { WriteLine("Hello world!"); WriteLine("Another message"); } // ^ `Console.` removed. } 

Sin embargo, esto no parece funcionar para mí. Recibo un error en la statement de using que dice:

“Una directiva ‘ using namespace de using namespace ‘ solo se puede aplicar a espacios de nombres; ‘ Console ‘ es un tipo, no un espacio de nombres. Considere una directiva ‘ using static ‘ en su lugar”

Estoy usando Visual Studio 2015, y tengo la versión de lenguaje de comstackción establecida en “C # 6.0”

¿Lo que da? ¿El ejemplo del blog msdn es incorrecto? ¿Por qué esto no funciona?


La publicación del blog ahora se ha actualizado para reflejar las últimas actualizaciones, pero aquí hay una captura de pantalla en caso de que el blog no funcione:

Blog

Parece que la syntax ha cambiado ligeramente desde que se escribieron esas publicaciones en el blog. Como sugiere el mensaje de error, agregue static a su statement de inclusión:

 using static System.Console; // ^ class Program { static void Main() { WriteLine("Hello world!"); WriteLine("Another message"); } } 

Entonces, tu código comstackrá.


Tenga en cuenta que, en C # 6.0, esto solo funcionará para los miembros declarados como static .

Por ejemplo, considere System.Math :

 public static class Math { public const double PI = 3.1415926535897931; public static double Abs(double value); //  } 

Al using static System.Math , puede usar Abs(); .
Sin embargo, aún tendría que prefijar PI porque no es un miembro estático: Math.PI; .

En C # 7.2 (y tal vez más bajo), este no debería ser el caso, los valores de const como PI se pueden usar.

La palabra clave static en una instrucción using importará solo el tipo especificado (y sus tipos nesteds). Además, no debes dar el nombre de tipo más. Así que solo agregue estática a su uso.

Nota: Utilice esta característica solo cuando las dos clases estén lógicamente relacionadas, de lo contrario, hace que leer el código sea bastante difícil.