Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Le mot-clé `static` | Principes Essentiels de la POO
C# Au-Delà des Bases

bookLe mot-clé `static`

Un mot-clé important que vous avez probablement déjà rencontré à plusieurs reprises est le mot-clé static. Dans le Cours de base C#, il a été mentionné que static est utilisé lors de la définition de variables globales - des variables qui se trouvent en dehors de toute méthode spécifique :

index.cs

index.cs

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

C'était une manière pratique de décrire le mot-clé static à ce moment-là, car il était supposé que le lecteur n'avait peut-être aucune connaissance des objets ou des classes à ce stade. Cependant, si vous regardez maintenant le code, vous pouvez réaliser que val est en réalité un champ de la classe ConsoleApp. Cependant, notez que la classe ConsoleApp est légèrement différente des classes que vous créez habituellement. En effet, ConsoleApp représente le programme lui-même, et il n'existe aucun objet de la classe ConsoleApp. Vous reviendrez sur cette partie un peu plus tard.

Puisqu'une classe n'est qu'un plan, plutôt comme une coquille vide, elle ne contient normalement pas de données en elle-même ; à la place, vous créez des objets à partir de ce plan, puis vous stockez et accédez aux données à partir de ces objets - comme expliqué précédemment :

index.cs

index.cs

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 vous accédez à ces champs, vous y accédez via un objet. Par exemple, dans un constructeur, vous utilisez essentiellement les données transmises par l'objet qui a appelé la méthode du constructeur :

index.cs

index.cs

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 vous accédez à des champs, vous accédez en réalité aux champs des objets qui appellent ces méthodes, et non à ceux de la classe elle-même, car une 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. Il suffit pour cela de déclarer ce champ ou cette méthode comme static :

index.cs

index.cs

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 la ConsoleApp ou la classe principale de tout programme, qui représente le programme lui-même, ne peut pas avoir d'objets, il est nécessaire de rendre leurs méthodes et champs statiques. C'est pourquoi la méthode Main est également static :

index.cs

index.cs

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

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

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

question mark

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

Select the correct answer

question mark

Quelle est la syntaxe correcte pour modifier le champ value ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 5

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Suggested prompts:

Can you explain more about the difference between static and non-static fields?

Why does the Main method have to be static in C#?

Can you give an example of when to use a static field or method?

Awesome!

Completion rate improved to 2.04

bookLe mot-clé `static`

Glissez pour afficher le menu

Un mot-clé important que vous avez probablement déjà rencontré à plusieurs reprises est le mot-clé static. Dans le Cours de base C#, il a été mentionné que static est utilisé lors de la définition de variables globales - des variables qui se trouvent en dehors de toute méthode spécifique :

index.cs

index.cs

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

C'était une manière pratique de décrire le mot-clé static à ce moment-là, car il était supposé que le lecteur n'avait peut-être aucune connaissance des objets ou des classes à ce stade. Cependant, si vous regardez maintenant le code, vous pouvez réaliser que val est en réalité un champ de la classe ConsoleApp. Cependant, notez que la classe ConsoleApp est légèrement différente des classes que vous créez habituellement. En effet, ConsoleApp représente le programme lui-même, et il n'existe aucun objet de la classe ConsoleApp. Vous reviendrez sur cette partie un peu plus tard.

Puisqu'une classe n'est qu'un plan, plutôt comme une coquille vide, elle ne contient normalement pas de données en elle-même ; à la place, vous créez des objets à partir de ce plan, puis vous stockez et accédez aux données à partir de ces objets - comme expliqué précédemment :

index.cs

index.cs

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 vous accédez à ces champs, vous y accédez via un objet. Par exemple, dans un constructeur, vous utilisez essentiellement les données transmises par l'objet qui a appelé la méthode du constructeur :

index.cs

index.cs

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 vous accédez à des champs, vous accédez en réalité aux champs des objets qui appellent ces méthodes, et non à ceux de la classe elle-même, car une 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. Il suffit pour cela de déclarer ce champ ou cette méthode comme static :

index.cs

index.cs

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 la ConsoleApp ou la classe principale de tout programme, qui représente le programme lui-même, ne peut pas avoir d'objets, il est nécessaire de rendre leurs méthodes et champs statiques. C'est pourquoi la méthode Main est également static :

index.cs

index.cs

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

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

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

question mark

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

Select the correct answer

question mark

Quelle est la syntaxe correcte pour modifier le champ value ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 5
some-alt