web-dev-qa-db-fra.com

Quelle est la différence entre les méthodes statiques dans une classe non statique et les méthodes statiques dans une classe statique?

J'ai deux classes Classe A et Classe B:

static class ClassA
{
    static string SomeMethod()
    {
        return "I am a Static Method";
    }
}

class ClassB
{
    static string SomeMethod()
    {
        return "I am a Static Method";
    }
}

Je veux savoir quelle est la différence entre ClassA.SomeMethod(); et ClassB.SomeMethod();

Lorsque les deux sont accessibles sans créer d'instance de la classe, pourquoi devons-nous créer une classe statique au lieu d'utiliser simplement une classe non statique et de déclarer les méthodes statiques?

37
Vamsi

La différence seulement est que les méthodes statiques dans une classe non statique ne peuvent pas être méthodes d'extension.


En d'autres termes, cela n'est pas valide:

class Test
{
    static void getCount(this ICollection<int> collection)
    { return collection.Count; }
}

alors que cela est valable:

static class Test
{
    static void getCount(this ICollection<int> collection)
    { return collection.Count; }
}
37
Mehrdad

Une classe statique ne peut contenir que des membres statiques.

Une méthode statique garantit que, même si vous deviez créer plusieurs objets classB, ils n'utiliseraient qu'une seule fonction SomeMethod partagée.

Techniquement, il n'y a pas de différence, sauf que SomeMethod de ClassA doit être statique.

14
Benjamin S

Si vous avez une classe non statique contenant uniquement des méthodes statiques, vous pouvez créer une instance de cette classe. Mais vous ne pouvez pas utiliser cette instance de manière significative. NB: lorsque vous ne définissez pas de constructeur, le compilateur en ajoute un pour vous.

Une classe statique n'a pas de constructeur, vous ne pouvez donc pas en créer d'instance. Le compilateur donne également une erreur lorsque vous lui ajoutez une méthode d'instance (où vous vouliez dire une méthode statique).

Voir aussi docs .

3
Hans Kesting
3
Crimsonland

Une méthode statique appartient à la classe et une méthode non statique appartient à un objet d'une classe. Autrement dit, une méthode non statique ne peut être appelée que sur un objet d'une classe à laquelle elle appartient. Une méthode statique ne peut accéder qu'aux membres statiques. Une méthode non statique peut accéder aux membres statiques et non statiques car au moment où la méthode statique est appelée, la classe peut ne pas être instanciée (si elle est appelée sur la classe elle-même). Dans l'autre cas, une méthode non statique ne peut être appelée que lorsque la classe a déjà été instanciée. Une méthode statique est partagée par toutes les instances de la classe. Chaque fois qu’une méthode est appelée en C++/Java/C #, un argument implicite (la référence ‘this’) est transmis avec/sans les autres paramètres. Dans le cas d'un appel de méthode statique, la référence "this" n'est pas transmise car les méthodes statiques appartiennent à une classe et n'ont donc pas la référence "this".

1
Akshatha