Pregunta

¿Cada llamada estática iniciará un nuevo hilo?

Por ejemplo:

class A
{
    public static void displayName()
    {
        Console.WriteLine("myName");
    }

    public static void displayAge()
    {
        Console.WriteLine("myAge");
    }
}


class B
{
    public void Foo()
    {
        A.displayName();
        A.displayAge();           
    }
} 

¿Las llamadas anteriores serán independientes entre sí? En caso afirmativo, entonces, ¿es algo similar a Threading?

¿Fue útil?

Solución

Responda a sus dudas con respecto a la llamada estática:

  

Pero escuché que cada llamada estática es   independientes entre sí como hay   sin instancia y solo miembros estáticos   estan involucrados. ¿es tan? - Sri Kumar 36   hace minutos

Puede pensar que hay una instancia 'global' de su clase, y todos los métodos estáticos están en esta instancia.

Como en su ejemplo, puede crear una instancia de 'usuario' llamando a ClassA myA = new ClassA () . Mientras tanto, habrá una instancia 'global', creada por el tiempo de ejecución pero invisible para usted, y los métodos estáticos residen en esta instancia. Comportamiento de métodos estáticos como métodos de instancia dentro de esta instancia 'global'.

Sorprendentemente, en C # hay un constructor estático, que se llamará cuando el tiempo de ejecución inicialice la instancia 'global'.

Puedes probar este código:

class A
{
    static A() {
       Console.WriteLine("Creating the global instance of class A....");
    }

    public static void displayName()
    {
        Console.WriteLine("myName");
    }

    public static void displayAge()
    {
        Console.WriteLine("myAge");
    }
}


class B
{
    public void Foo()
    {
        A.displayName();
        A.displayAge();           
    }
}

El resultado será:

Creating the global instance of class A....
myName
myAge

Aparte de esto, los métodos estáticos no tienen ninguna diferencia con los métodos de instancia.

Las variables en cada método estático tendrán su propio alcance, y son independientes de un método a otro.

Otros consejos

No, se ejecutarán secuencialmente en el mismo hilo

No. Los métodos estáticos son como cualquier otro método, a menos que los invoque en diferentes hilos, se ejecutarán en el mismo hilo desde el que ha invocado.

Realmente depende de dónde invocas. Los métodos estáticos en sí mismos no crean ningún subproceso y se ejecutan dentro.

Un método estático es un método que no tiene ninguna clase asociada. Esto significa que llamar a un método estático no tiene que pasar por ninguna dirección indirecta, a diferencia de un método virtual que se resuelve en función del objeto al que se llama.

Todos los métodos se ejecutarán en el hilo del método de invocación, ya sea virtual o estático. Si desea que un método se ejecute en un hilo diferente, use el grupo de hilos o alguna otra técnica.

Una cosa más:

  

escuché que cada llamada estática es independiente entre sí

Las llamadas a métodos estáticos no son realmente independientes.

El método estático aún puede acceder a otros campos estáticos y propiedades dentro de la misma clase, o campos estáticos públicamente visibles y propiedades de otras clases, que también son globales y se conservan durante la vida útil de su aplicación.

Los métodos estáticos que están cambiando el estado de los campos estáticos no son "independientes", como sugirió. Lo único que puede decir con certeza es que siempre se invocan en una instancia única (siempre utilizando los mismos datos privados).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top