Frage

Hat jeder statischen Aufruf wird einen neuen Thread initiieren?

Für Z. B:.

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

Wird die oben Anrufe laufen unabhängig voneinander? Wenn ja, dann ist es etwas ähnlich wie Threading?

War es hilfreich?

Lösung

Antwort auf Ihre Zweifel an statischen Aufruf:

  

Aber ich hörte jeder statischer Anruf   unabhängig voneinander, da es   keine Instanz und nur statische Mitglieder   beteiligt sein. ist es so? - Sri Kumar 36   Vor Minuten

Sie können denken, gibt es eine ‚globale‘ Instanz der Klasse, und alle statischen Methoden werden von dieser Instanz statt.

Wie in Ihrem Beispiel, können Sie durch den Aufruf ClassA myA = new ClassA() eine ‚Nutzer‘ Instanz erstellen. Inzwischen gibt es eine ‚globale‘ Instanz sein, die von der Laufzeit erstellt, aber Sie unsichtbar und statische Methoden befinden sich in diesem Fall. Statische Methoden Verhalten als Instanzmethoden innerhalb dieser ‚globalen‘ Instanz.

Erstaunlicherweise in C # gibt es einen statischen Konstruktor, die aufgerufen werden, wenn die ‚globale‘ Instanz von der Laufzeit initialisiert wird.

Sie können diesen Code testen:

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

Der Ausgang wird sein:

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

Abgesehen davon, statische Methoden haben nichts Unterschied von Instanzmethoden.

Variablen in jeder statischen Methode wird seinen eigenen Umfang hat, und sie sind unabhängig von einem Verfahren auf ein anderes Verfahren.

Andere Tipps

Nein werden sie nacheinander auf dem gleichen Thread ausgeführt

Nein. Statische Methoden sind wie alle anderen Methoden, wenn Sie sie in verschiedenen Threads aufrufen sie in demselben Thread ausgeführt werden, von dem Sie aufgerufen haben.

Es hängt wirklich davon ab, wo sie Sie aufrufen. Statische Methoden selbst schafft keine Fäden und laufen im Innern.

Eine statische Methode ist eine Methode, die keine Klasse mit ihm verbunden. Dies bedeutet, dass eine statische Methode aufrufen nicht durch eine Umleitung zu gehen hat, im Gegensatz zu einer virtuellen Methode, die die Aufgabe zugrunde, aufgelöst wird, wird es aufgerufen.

Alle Methoden werden auf dem Gewinde der rufenden Methode, ob virtuell oder statisch ausgeführt werden. Wenn Sie eine Methode wollen auf einem anderen Thread ausgeführt werden, verwenden Sie den Thread-Pool oder eine andere Technik.

Eine weitere Sache:

  

ich hörte jeder statischen Aufruf voneinander unabhängig ist

Statische Methodenaufrufe sind nicht wirklich unabhängig.

Statische Methode noch andere statische Felder und Eigenschaften innerhalb derselben Klasse zugreifen kann, oder öffentlich sichtbare statische Felder und Eigenschaften anderer Klassen, die auch global sind und während der Laufzeit Ihrer Anwendung beibehalten.

Statische Methoden, die den Zustand der statischen Felder ändern sich nicht „unabhängig“, wie Sie vorgeschlagen. Das einzige, was man sicher sagen kann, dass sie immer auf einer Einzel aufgerufen werden Instanz (immer die gleichen privaten Daten verwendet wird).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top