Вопрос

Будет ли каждый статический вызов инициировать новый поток?

Например:

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

Будут ли вышеуказанные вызовы выполняться независимо друг от друга?Если да, то это что-то похожее на Threading?

Это было полезно?

Решение

Ответьте на ваши сомнения относительно статического вызова:

  

Но я слышал, что каждый статический вызов   независимо друг от друга, как есть   нет экземпляра и только статические члены   вовлечены. это так? & # 8211; Шри Кумар 36   минут назад

Вы можете подумать, что существует «глобальный» экземпляр вашего класса, и все статические методы хранятся в этом экземпляре.

Как и в вашем примере, вы можете создать пользовательский экземпляр, вызвав ClassA myA = new ClassA () . Между тем, будет «глобальный» экземпляр, который создается во время выполнения, но невидим для вас, и статические методы находятся в этом экземпляре. Поведение статических методов как методов экземпляра в этом «глобальном» экземпляре.

Удивительно, но в C # есть статический конструктор, который будет вызываться при инициализации «глобального» экземпляра во время выполнения.

Вы можете проверить этот код:

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

Результат будет:

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

Кроме этого, статические методы ничем не отличаются от методов экземпляра.

Переменные в каждом статическом методе будут иметь собственную область видимости, и они не зависят от одного метода к другому.

Другие советы

Нет, они будут последовательно выполняться в одном потоке

Нет.Статические методы подобны любым другим методам, если вы не вызываете их в разных потоках, они будут выполняться в том же потоке, из которого вы вызвали.

Это действительно зависит от того, куда вы вызываете.Статические методы сами по себе не создают никаких потоков и не выполняются внутри них.

Статический метод - это метод, с которым не связано ни одного класса. Это означает, что вызов статического метода не должен проходить через какое-либо косвенное обращение, в отличие от виртуального метода, который разрешается на основе объекта, для которого он вызывается.

Все методы будут выполняться в потоке вызывающего метода, виртуального или статического. Если вы хотите, чтобы метод выполнялся в другом потоке, используйте пул потоков или другой метод.

Еще одна вещь:

  

я слышал, что каждый статический вызов не зависит друг от друга

Вызовы статических методов на самом деле не являются независимыми.

Статический метод может по-прежнему получать доступ к другим статическим полям и свойствам в том же классе или к публично видимым статическим полям и свойствам других классов, которые также являются глобальными и сохраняются в течение всего времени жизни вашего приложения.

Статические методы, которые изменяют состояние статических полей, не являются "независимыми", как вы предложили. Единственное, что вы можете сказать наверняка, это то, что они всегда вызываются в одном экземпляре (всегда используя одни и те же личные данные).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top