2011-10-07 7 views
42

Il C# ha funzionalità come le importazioni statiche di Java?importazioni statiche in C#

così invece di scrivere codice come

FileHelper.ExtractSimpleFileName(file) 

Potrei scrivere

ExtractSimpleFileName(file) 

e compilatore saprei che il metodo da FileHelper dire.

+0

Eventuali duplicati di [? E 'possibile fare riferimento a un metodo in una classe statica senza fare riferimento alla classe] (http://stackoverflow.com/questions/30671769/is-it-possible-to-reference-a-method-in-a-static-class-senza-referencing-the-c) –

risposta

64

A partire con C# 6.0, questo è possibile:

using static FileHelper; 

// in a member 
ExtractSimpleFileName(file) 

Tuttavia, le precedenti versioni di C# non hanno importazioni statiche.

È possibile avvicinarsi con un alias per il tipo.

using FH = namespace.FileHelper; 

// in a member 
FH.ExtractSimpleFileName(file) 

In alternativa, cambiare il metodo statico a un extension method sul tipo - si sarebbe quindi in grado di definirlo come:

var value = file.ExtractSimpleFileName(); 
12

No, tale funzione non esiste in C#. È necessario specificare la classe a cui appartiene il metodo statico, a meno che non si sia già all'interno di un metodo di questa stessa classe.

In C# se si dispone di extension methods che tipo di imitare questo.

4

tempo cammina ... sembra che C# potrebbe ottenere statica importazioni nella prossima versione, vedere http://msdn.microsoft.com/en-us/magazine/dn683793.aspx per un'anteprima.

using System; 
using System.Console; // using the Console class here 

public class Program 
{ 
    public static void Main() 
    { 
     // Console.WriteLine is called here 
     WriteLine("Hello world!"); 
    } 
} 

Il official documentation per il 'Roslyn' compilatore C# elenca la funzione come 'fatto'

+0

Jack be Nimble, Jack be Quick ... con C# usi statici! Non posso esprimere quanto sono entusiasta di questa funzione. Ho atteso con impazienza che questa espressività entrasse nella lingua per anni, ma non mi sarei mai aspettata che avrei visto il giorno. –

2

C# 6.0 in Roslyn Platform supports Static import. Si richiede dichiarazione come:

using static System.Console; 

modo che il codice potrebbe essere simile:

using static System.Console; 
namespace TestApplication 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      WriteLine("My test message"); 
     } 
    } 
} 

La versione prevista in precedenza per C# 6.0 aveva importazione statica senzastatic parola chiave.

Per le altre nuove caratteristiche di C# 6.0 Vedi: New Language Features in C# 6