Domanda

Ogni chiamata statica avvierà un nuovo thread?

Per esempio:

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();           
    }
} 

Le chiamate sopra saranno eseguite l'una indipendentemente dall'altra? Se sì, allora è qualcosa di simile al threading?

È stato utile?

Soluzione

Rispondi al tuo dubbio sulla chiamata statica:

  

Ma ho sentito che ogni chiamata statica è   indipendentemente l'uno dall'altro come c'è   nessuna istanza e solo membri statici   sono coinvolti. è così? & # 8211; Sri Kumar 36   minuti fa

Puoi pensare che ci sia un'istanza 'globale' della tua classe e tutti i metodi statici sono conservati da questa istanza.

Come nel tuo esempio, puoi creare un'istanza "utente" chiamando ClassA myA = new ClassA () . Nel frattempo, ci sarà un'istanza 'globale', che viene creata dal runtime ma invisibile per te, e i metodi statici risiedono in questa istanza. Comportamento di metodi statici come metodi di istanza all'interno di questa istanza "globale".

Sorprendentemente, in C # esiste un costruttore statico, che verrà chiamato quando l'istanza "globale" viene inizializzata dal runtime.

Puoi provare questo codice:

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();           
    }
}

L'output sarà:

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

A parte questo, i metodi statici non hanno alcuna differenza rispetto ai metodi di istanza.

Le variabili in ciascun metodo statico avranno il proprio ambito e sono indipendenti da un metodo a un altro.

Altri suggerimenti

No, verranno eseguiti in sequenza sullo stesso thread

No. I metodi statici sono come tutti gli altri metodi, a meno che non li invochi in thread diversi, verranno eseguiti nello stesso thread da cui hai invocato.

Dipende davvero da dove invochi. I metodi statici stessi non creano alcun thread ed eseguono all'interno.

Un metodo statico è un metodo a cui non è associata alcuna classe. Ciò significa che la chiamata di un metodo statico non deve passare attraverso alcuna direzione indiretta, a differenza di un metodo virtuale che viene risolto in base all'oggetto su cui viene chiamato.

Tutti i metodi verranno eseguiti sul thread del metodo di invocazione, virtuale o statico. Se vuoi eseguire un metodo su un thread diverso, usa il pool di thread o qualche altra tecnica.

Un'altra cosa:

  

ho sentito che ogni chiamata statica è indipendente l'una dall'altra

Le chiamate ai metodi statici non sono realmente indipendenti.

Il metodo statico può ancora accedere ad altri campi e proprietà statici all'interno della stessa classe, o campi e proprietà statici visibili pubblicamente di altre classi, che sono anche globali e conservati durante la vita della tua app.

I metodi statici che stanno cambiando lo stato dei campi statici non sono "indipendenti", come hai suggerito. L'unica cosa che puoi dire con certezza che vengono sempre invocati in una singola istanza (utilizzando sempre gli stessi dati privati).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top