variable - ¿Cómo uso la función C#6 "Usar estática"?
use static class in c# (2)
Estoy echando un vistazo a algunas de las nuevas funciones en C # 6, específicamente, "usando estática" .
El uso de static es un nuevo tipo de cláusula de uso que le permite importar miembros estáticos de tipos directamente en el ámbito.
(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, usando 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 estar funcionando para mí.
Recibo un error en la declaración de
using
, que dice:
"Una directiva ''
using namespace
deusing 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 del lenguaje de compilación establecida en "C # 6.0"
¿Lo que da? ¿Es incorrecto el ejemplo del blog msdn? ¿Por qué no funciona esto?
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 deje de funcionar:
La palabra clave
static
en una instrucción de
using
importará solo el tipo especificado (y sus tipos anidados).
Además, ya no debe dar el nombre del tipo.
Tan solo agregue estática a su uso.
Nota: utilice esta función solo cuando las dos clases estén relacionadas lógicamente, de lo contrario, la lectura del código será bastante difícil.
Parece que la sintaxis ha cambiado ligeramente desde que se escribieron esas publicaciones de blog.
Como sugiere el mensaje de error, agregue
static
a su declaración de inclusión:
using static System.Console;
// ^
class Program
{
static void Main()
{
WriteLine("Hello world!");
WriteLine("Another message");
}
}
Entonces, su código se compilará.
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);
// <more stuff>
}
Cuando
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, también se pueden usar valores
const
como
PI
.