Question

Chaque appel statique lancera-t-il un nouveau thread?

Pour exemple:

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

Les appels ci-dessus seront-ils indépendants les uns des autres? Si oui, est-ce que cela ressemble à du filetage?

Était-ce utile?

La solution

Répondez à vos doutes concernant l'appel statique:

  

Mais j'ai entendu chaque appel statique est   indépendant les uns des autres comme il y a   pas d'instance et seulement des membres statiques   sont impliqués. est-ce vrai? - Sri Kumar 36   il y a quelques minutes

Vous pouvez penser qu'il existe une instance "globale" de votre classe et que toutes les méthodes statiques sont conservées par cette instance.

Comme dans votre exemple, vous pouvez créer une instance "utilisateur" en appelant ClassA myA = new ClassA () . En attendant, il y aura une instance 'globale', créée par le moteur d'exécution mais invisible pour vous, et des méthodes statiques résident dans cette instance. Comportement des méthodes statiques en tant que méthodes d'instance dans cette instance 'globale'.

Étonnamment, en C #, il existe un constructeur statique, qui sera appelé lors de l'initialisation de l'instance 'globale' par le moteur d'exécution.

Vous pouvez tester ce code:

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

Le résultat sera:

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

Hormis cela, les méthodes statiques n'ont aucune différence avec les méthodes d'instance.

Les variables de chaque méthode statique auront leur propre portée et elles seront indépendantes d'une méthode à l'autre.

Autres conseils

Non, ils s'exécuteront de manière séquentielle sur le même thread

Non. Les méthodes statiques ressemblent à toutes les autres méthodes, à moins que vous ne les appeliez dans des threads différents. Elles seront exécutées dans le même thread que celui auquel vous avez appelé.

Cela dépend vraiment de l'endroit où vous appelez. Les méthodes statiques elles-mêmes ne créent pas de threads et ne s'exécutent pas à l'intérieur.

Une méthode statique est une méthode à laquelle aucune classe n'est associée. Cela signifie que l'appel d'une méthode statique ne doit pas nécessairement passer par un indirection, contrairement à une méthode virtuelle résolue en fonction de l'objet sur lequel elle est appelée.

Toutes les méthodes seront exécutées sur le thread de la méthode invoquée, qu'elle soit virtuelle ou statique. Si vous souhaitez qu'une méthode s'exécute sur un autre thread, utilisez le pool de threads ou une autre technique.

Encore une chose:

  

j’ai entendu que chaque appel statique est indépendant l’un de l’autre

Les appels de méthodes statiques ne sont pas vraiment indépendants.

La méthode statique peut toujours accéder à d'autres champs et propriétés statiques de la même classe, ou à des champs et propriétés statiques visibles publiquement d'autres classes, qui sont également globaux et conservés pendant la durée de vie de votre application.

Les méthodes statiques qui modifient l'état des champs statiques ne sont pas "indépendantes", comme vous l'avez suggéré. La seule chose que vous pouvez dire avec certitude est toujours invoquée sur une instance unique (toujours avec les mêmes données privées).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top