2011-10-07 12 views
42

¿C tiene características como las importaciones estáticas de Java?importaciones estáticas en C#

así que en vez de escribir código como

FileHelper.ExtractSimpleFileName(file) 

podría escribir

ExtractSimpleFileName(file) 

y el compilador sabría que me refiero método de FileHelper.

+0

duplicado posible de [? ¿Es posible hacer referencia a un método en una clase estática sin hacer referencia a la clase] (http://stackoverflow.com/questions/30671769/is-it-possible-to-reference-a-method-in-a-static-class-without-referencing-the-c) –

Respuesta

64

A partir de C# 6.0, esto es posible:

using static FileHelper; 

// in a member 
ExtractSimpleFileName(file) 

Sin embargo, las versiones anteriores de C# no contamos con las importaciones estáticas.

Puede acercarse con un alias para el tipo.

using FH = namespace.FileHelper; 

// in a member 
FH.ExtractSimpleFileName(file) 

alternativa, cambie el método estático a un extension method del tipo - A continuación, sería capaz de llamar como:

var value = file.ExtractSimpleFileName(); 
12

No, tal característica no existe en C#. Debe especificar la clase a la que pertenece el método estático a menos que ya esté dentro de un método de esta misma clase.

En C# aunque tiene extension methods que imita esto.

4

El tiempo pasa ... parece que C# podría obtener estática importaciones en la próxima versión, vea http://msdn.microsoft.com/en-us/magazine/dn683793.aspx para una vista previa.

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!"); 
    } 
} 

El official documentation para el 'Dulce' compilador de C# enumera la función como 'hecho'

+0

¡Jack sea ágil, Jack sea rápido ... con los usos estáticos de C#! No puedo expresar lo emocionado que estoy por esta característica. He estado esperando ansiosamente que esta expresividad ingrese al lenguaje durante años, pero nunca esperé ver el día. –

2

C# 6.0 en Roslyn Plataforma supports Static import. Requiere declaración como:

using static System.Console; 

lo que el código podría ser:

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

La versión planificada anteriormente para C# 6.0 tenía importación estática sin static palabra clave.

Para otras nuevas características de C# 6.0 Ver: New Language Features in C# 6

Cuestiones relacionadas