2015-08-06 15 views
87

Sto dando un'occhiata ad un paio di new features in C# 6, in particolare, "using static".Come si usa la funzione C# 6 "Uso statico"?

utilizzando statica è un nuovo tipo di utilizzare la clausola che consente di importare membri statici di tipi direttamente nel campo di applicazione.
(in fondo al post del blog)

L'idea è la seguente, secondo un paio di tutorial che ho trovato,
Invece di:

using System; 

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

è possibile omettere il ripetuto Console, usando la nuova caratteristica C# 6 dell'uso di classi statiche:

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

Tuttavia, questo non sembra funzionare per me. Sto ottenendo un errore sulla dichiarazione using, dicendo:

'using namespace' direttiva "A può essere applicato solo a spazi dei nomi, 'Console' è un non di tipo uno spazio dei nomi consideri un 'using static' direttiva, invece. "

sto usando visual Studio 2015, e ho la versione in lingua accumulo impostata "C# 6.0"

cosa succede? L'esempio del blog di msdn è errato? Perché non funziona?

risposta

127

Sembra che la sintassi sia leggermente cambiata da quando sono stati scritti questi post. Come suggerisce il messaggio di errore, aggiungere static alla vostra istruzione include:

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

Poi, il codice verrà compilato.


Si noti che questo funzionerà solo per membri dichiarati come static.

Ad esempio, si consideri System.Math:

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

Quando using static System.Math, si può semplicemente utilizzare Abs();.
Tuttavia, è necessario il prefisso PI perché non è un membro statico: Math.PI;.

+3

Sto riscontrando un problema simile, ma con 'System.Math', in particolare' Math.PI'. Quando uso 'usando statico System.Math', metodi come' Sqrt() 'funzionano ma non una costante come' PI'. Devo continuare a scrivere 'Math.PI' o il codice non viene compilato. Sono curioso di sapere perché questo non funziona. Devo presentare una nuova domanda per questo? – skwear

+5

@skwear: sembra il materiale per una nuova domanda, sì. – Cerbrus

+1

Come risposta rapida alla domanda di @ skwear: _ "l'uso di static è un nuovo tipo di clausola using che consente di importare membri __static__ <...>" _. 'PI' non è un membro _static_ della classe' Math'. È una costante In poche parole: il membro deve essere dichiarato come 'statico'. – Cerbrus