2011-12-10 20 views
52

ir Java-C# Tengo la siguiente pregunta: ¿ en Java que podía hacer lo siguiente:bloques de código estático

public class Application { 
    static int attribute; 
    static { 
     attribute = 5; 
    } 
    // ... rest of code 
} 

Sé que puedo inicializar esto desde el constructor, pero esto no se ajusta a mis necesidades (Quiero inicializar y llamar algunas funciones de utilidad sin crear el objeto). ¿C# lo admite? Si es así, ¿cómo puedo hacer esto?

Gracias de antemano,

Respuesta

96
public class Application() 
{  

    static int attribute;  
    static Application() 
    {   
     attribute = 5;  
    } // ..... rest of code 
} 

Puede utilizar el equivalente C# static constructors. Por favor, no lo confundas con un constructor habitual. Un constructor regular no tiene un modificador static delante de él.

Supongo que su //... rest of the code también debe ejecutarse una vez. Si no tiene dicho código, simplemente puede hacer esto.

public class Application() 
{  

    static int attribute = 5; 
} 
+0

@parapura esto creará una instancia del objeto Aplicación, quiero ejecutar el bloque estático sin crear el objeto – GETah

+3

@GETah No ... Observe el 'estático' –

+0

@parapurarajkumar +1 Agradable, funcionó . Muchas gracias :) – GETah

12

Usted sólo puede escribir un bloque constructor estático como esta,

static Application(){ 
attribute=5; 
} 

Esto es lo que ocurrió.

+0

esto creará una instancia del objeto Aplicación, quiero ejecutar el bloque estático sin crear el objeto – GETah

+1

@GETah: No lo hará desde que se usa la palabra clave static. – Ajai

+0

"Se llama automáticamente a un constructor estático para inicializar la clase antes de que se cree la primera instancia o se haga referencia a cualquier miembro estático". http://msdn.microsoft.com/en-us/library/k9x6w0hc(v=vs.v=80).aspx mira esta página – Ajai

2

En su escenario particular, se puede hacer lo siguiente:

public class Application { 
    static int attribute = 5; 
    // ... rest of code 
} 

ACTUALIZACIÓN:

Parece que usted quiere llamar a un método estático. Puede hacerlo de la siguiente manera:

public static class Application { 
    static int attribute = 5; 

    public static int UtilityMethod(int x) { 
     return x + attribute; 
    } 
} 
1

Encuentro algo más útil. Si su variable necesita más de una expresión/declaración para inicializar, ¡use esto!

static A a = new Func<A>(() => { 
    // do it here 
    return new A(); 
})(); 

Este enfoque no está limitado en las clases.

+1

Esto es genial. Gracias. –

Cuestiones relacionadas