Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Le Mot-clé `static` | Essentiels de la POO
C# au-delà des Bases
course content

Contenu du cours

C# au-delà des Bases

C# au-delà des Bases

1. Structures Supplémentaires et Gestion des Fichiers
2. Structures et Énumérateurs
3. Introduction à la Programmation Orientée Objet (POO)
4. Essentiels de la POO
5. Principes de la POO

book
Le Mot-clé `static`

cs

index

copy
1234567891011
using System; class ConsoleApp { static int val = 10; static void Main() { Console.WriteLine($"The value is {val}"); } }

C'était un moyen pratique de décrire le mot-clé static à ce moment-là car il était attendu que le lecteur n'ait peut-être aucune connaissance des objets ou des classes à ce stade, cependant maintenant si vous regardez le code, vous pourriez réaliser que val est essentiellement un champ de la classe ConsoleApp. Cependant, notez que la classe ConsoleApp est légèrement différente des classes que nous créons normalement. C'est parce que ConsoleApp représente le programme lui-même, et il n'y a pas d'objet de ConsoleApp. Nous reviendrons sur cette partie dans un instant.

Puisqu'une classe n'est qu'un plan, plus comme une coquille vide, elle ne contient normalement pas de données par elle-même, au lieu de cela, nous créons des objets en utilisant ce plan et ensuite nous stockons et accédons aux données de ces objets - comme expliqué précédemment :

cs

index

copy
12345678910111213141516171819202122232425262728
using System; class Complex { public int real; public int img; public Complex(int real, int img) { this.real = real; this.img = img; } } class ConsoleApp { static int val = 10; static void Main() { Complex c = new Complex(5, 10); // We can use and update the field of 'c' which is an instance. Console.WriteLine(c.real); c.real = 7; Console.WriteLine(c.real); } }

Même à l'intérieur d'une classe, lorsque nous accédons à ces champs, nous y accédons via un objet. Par exemple, dans un constructeur, nous utilisons essentiellement les données qui ont été transmises par l'objet qui a appelé la méthode du constructeur :

cs

index

copy
12345678
public Complex(int real, int img) { // 'int real' and 'int img' contain the data which was passed // 'this.real' refers to the 'real' field of the object which is calling this constructor // same is the case for 'this.img' this.real = real; this.img = img; }

De même, dans d'autres méthodes également, lorsque nous accédons à des champs, nous accédons essentiellement aux champs des objets qui appellent ces méthodes, et non à ceux de la classe elle-même car la classe ne contient normalement aucune donnée.

Cependant, il existe un moyen de stocker des données directement dans une classe et de rendre une propriété accessible sans avoir besoin de créer un objet. Nous pouvons le faire en rendant simplement ce champ ou cette méthode static :

cs

index

copy
123456789101112131415161718192021222324252627282930313233343536373839
using System; class Complex { public int real; public int img; // A static field can contain data // It is set to private because we don't want it to be manually modifiable from outside // This will track the total number of 'Complex' objects created private static int numbers = 0; public Complex(int real, int img) { this.real = real; this.img = img; numbers += 1; } // A static method // A static method or field can be accessed using the 'ClassName.PropertyName' syntax (see below) public static int getTotalComplexNumbers() { return numbers; } } class ConsoleApp { static void Main() { Console.WriteLine(Complex.getTotalComplexNumbers()); // 0 new Complex(1, 2); Console.WriteLine(Complex.getTotalComplexNumbers()); // 1 new Complex(2, 3); Console.WriteLine(Complex.getTotalComplexNumbers()); // 2 } }

Puisque le ConsoleApp ou la classe principale de tout programme qui représente le programme lui-même ne peut pas avoir d'objets, nous devons rendre leurs méthodes et champs statiques. C'est pourquoi la méthode Main est également static :

cs

index

copy
1234
static void Main() { // code }

1. Une classe peut-elle stocker directement des données ?

2. Quelle est la syntaxe correcte pour modifier le champ value ?

Une classe peut-elle stocker directement des données ?

Une classe peut-elle stocker directement des données ?

Sélectionnez la réponse correcte

Quelle est la syntaxe correcte pour modifier le champ `value` ?

Quelle est la syntaxe correcte pour modifier le champ value ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 5
We're sorry to hear that something went wrong. What happened?
some-alt