web-dev-qa-db-fra.com

Qu'est-ce qu'une "méthode statique" en C #?

Qu'est-ce que cela signifie lorsque vous ajoutez le mot clé static à une méthode?

public static void doSomething(){
   //Well, do something!
}

Pouvez-vous ajouter le mot clé static à la classe? Qu'est-ce que cela signifierait alors?

171
Moshe

Une fonction static, contrairement à une fonction régulière (instance), n'est pas associée à une instance de la classe.

Une classe static est une classe qui ne peut contenir que des membres static et ne peut donc pas être instanciée.

Par exemple:

class SomeClass {
    public int InstanceMethod() { return 1; }
    public static int StaticMethod() { return 42; }
}

Pour appeler InstanceMethod, vous avez besoin d’une instance de la classe:

SomeClass instance = new SomeClass();
instance.InstanceMethod();   //Fine
instance.StaticMethod();     //Won't compile

SomeClass.InstanceMethod();  //Won't compile
SomeClass.StaticMethod();    //Fine
301
SLaks

D'un autre point de vue: considérez que vous voulez apporter des modifications sur une seule chaîne. Par exemple, vous voulez mettre les lettres en majuscule, etc. vous créez une autre classe nommée "Outils" pour ces actions. il est inutile de créer une instance de la classe "Tools", car aucune entité n'est disponible à l'intérieur de cette classe (par rapport à la classe "Person" ou "Teacher"). Nous utilisons donc un mot clé statique pour utiliser la classe "Tools" sans en créer aucune, et lorsque vous appuyez sur point après le nom de la classe ("Tools"), vous pouvez accéder aux méthodes de votre choix.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Tools.ToUpperCase("Behnoud Sherafati"));
        Console.ReadKey();
    }
}

public static class Tools
{
    public static string ToUpperCase(string str)
    {
        return str.ToUpper();

    }
}
}
25
Behnoud Sherafati

Une méthode, un champ, une propriété ou un événement statique est appelable sur une classe même si aucune instance de la classe n'a été créée. Si des instances de la classe sont créées, elles ne peuvent pas être utilisées pour accéder au membre statique. Une seule copie des champs et des événements statiques existe et les propriétés et méthodes statiques ne peuvent accéder qu'aux champs et aux événements statiques. Les membres statiques sont souvent utilisés pour représenter des données ou des calculs qui ne changent pas en réponse à l'état de l'objet. Par exemple, une bibliothèque mathématique peut contenir des méthodes statiques pour calculer les sinus et les cosinus. Les membres statiques d'une classe sont déclarés à l'aide du mot clé static avant le type de retour du membre.

13
Alborz

Fonction statique signifie qu’elle est associée à la classe (non pas à une instance particulière de la classe mais à la classe elle-même) et qu’elle peut être invoquée même en l’absence d’instances de classe.

Classe statique signifie que cette classe ne contient que des membres statiques.

5
mih

En bref, vous ne pouvez pas instancier la classe statique: Ex:

static class myStaticClass
{
    public static void someFunction()
    { /* */ }
}

Vous ne pouvez pas faire comme ça:

myStaticClass msc = new myStaticClass();  // it will cause an error

Vous pouvez faire que:

myStaticClass.someFunction();
5
r.mirzojonov

Lorsque vous ajoutez un mot clé "statique" à une méthode, cela signifie que l'implémentation sous-jacente donne le même résultat pour toutes les instances de la classe. Inutile de dire que le résultat varie avec le changement de la valeur des paramètres

0
Balaji