196 votes

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

Que signifie l'ajout du mot clé static à une méthode ?

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

Pouvez-vous ajouter le static mot-clé en classe ? Que signifierait-il alors ?

12 votes

Vous pouvez utiliser une méthode statique sans créer une instance de cette classe, simplement en utilisant class_name.static_method_name() ;

0 votes

Au niveau de la programmation, nous avons l'impression de pouvoir appeler une méthode statique sans créer une instance d'une classe/type. En interne, c'est pas l'affaire. Le CLR gère en interne une instance spéciale appelée exemple de type pour gérer les appels aux méthodes statiques. Veuillez consulter este réponse. C'est tellement intriguant.

342voto

SLaks Points 391154

A static contrairement à une fonction ordinaire ( instance ), n'est pas associée à une instance de la classe.

A static est une classe qui ne peut contenir que static et ne peuvent donc pas être instanciés.

Par exemple :

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

Afin d'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

35 votes

Donc c'est comme une méthode de classe au lieu d'une méthode d'instance ?

6 votes

@Moshe : Exactement. Avec une méthode statique, vous n'avez pas besoin d'une instance de la classe pour appeler la méthode, seulement de la classe.

3 votes

Mais existe-t-il réellement une sorte de limitation technique qui empêche d'appeler une méthode statique sur une instance ? Si le compilateur l'autorise, quel est le danger qu'elle soit accessible ?

30voto

user3863369 Points 12

D'un autre point de vue : Considérons que vous voulez faire quelques changements sur une seule chaîne. Par exemple, vous voulez mettre les lettres en majuscules et ainsi de suite. vous créez une autre classe nommée "Tools" pour ces actions. Il n'y a aucun sens à créer une instance de la classe "Tools" parce qu'il n'y a aucun type d'entité disponible dans cette classe (comparé à la classe "Person" ou "Teacher"). Donc nous utilisons le mot-clé static afin d'utiliser la classe "Tools" sans créer d'instance de celle-ci, et lorsque vous appuyez sur le point après le nom de la classe ("Tools"), vous pouvez avoir accès aux méthodes que vous souhaitez.

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

    }
}
}

1 votes

L'utilisation de "faire des modifications sur une chaîne de caractères" est un mauvais exemple - les chaînes de caractères sont immuables et ne peuvent pas être modifiées. Mais, autrement, l'explication a du sens (en substituant une classe non immuable à la chaîne)

13voto

Alborz Points 768

Une méthode, un champ, une propriété ou un événement statique peut être appelé 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. Il n'existe qu'une seule copie des champs et événements statiques, et les méthodes et propriétés statiques ne peuvent accéder qu'aux champs et événements statiques. Les membres statiques sont souvent utilisés pour représenter des données ou des calculs qui ne changent pas en fonction de l'état de l'objet ; par exemple, une bibliothèque mathématique peut contenir des méthodes statiques pour calculer le sinus et le cosinus. Les membres statiques d'une classe sont déclarés à l'aide du mot clé static avant le type de retour du membre.

5voto

mih Points 345

Une fonction statique signifie qu'elle est associée à la classe (pas à une instance particulière de la classe mais à la classe elle-même) et qu'elle peut être invoquée même si aucune instance de la classe n'existe.

Une classe statique signifie que la classe ne contient que des membres statiques.

5voto

Gohomeurdrunk Points 425

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

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

Tu ne peux pas faire comme ça :

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

Vous ne pouvez faire que :

myStaticClass.someFunction();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X