Programmation procédurale et programmation orientée objet
Avant l’apparition des classes, des langages comme le C ne disposaient pas de ce concept. Ce style de programmation sans classes ni objets, tel que le langage C, est appelé programmation procédurale.
Programmation procédurale : un programme est une suite d’instructions, l’objectif principal est d’optimiser les étapes d’exécution.
Avec l’existence des classes, nous pouvons réaliser de la programmation orientée objet.
Programmation orientée objet : un programme est constitué d’un ensemble de classes encapsulées. L’idée centrale consiste à regrouper les données et les fonctions qui manipulent ces données au sein d’unités logiquement liées ; ces unités sont appelées classes (class).
Définition d’une classe
Une classe est une structure de données qui contient des données stockées et du code exécutable. Elle comporte deux catégories de membres :
- Membres de données (Data Members) : stockent les attributs de l’objet : champs (Fields), constantes (Constants)
- Membres fonctionnels (Function Members) : implémentent la logique de comportement des objets : méthodes, propriétés, constructeurs, destructeurs, opérateurs, indexeurs, événements
Une classe est un ensemble encapsulant des données et fonctions logiquement associées, utilisé pour modéliser des entités du monde réel ou abstrait.
En résumé, une classe est une structure de données composée de données et de fonctions. On peut créer des objets à partir d’une classe ; les données et membres sont accessibles via les objets, et ils sont aussi accessibles directement depuis l’intérieur de la classe.
Déclaration d’une classe
Le mot-clé class définit uniquement un modèle de classe, il ne crée pas d’instances d’objets. Un modèle comporte trois parties : nom de la classe, membres de la classe, caractéristiques de la classe.
Syntaxe
class NomClasse
{
// déclaration des membres (champs, méthodes, l’ordre n’est pas imposé)
}Langage du code : JavaScript (javascript)
La déclaration de classe est souvent désignée sous le nom de définition de classe (class definition)
class Program
{
static void Main(string[] args)
{
AddCalculator addCalculator = new AddCalculator();
SubCalculator subCalculator = new SubCalculator();
}
}
class AddCalculator
{
public int A { get; set; }
public int B { get; set; }
public int Add()
{
return A + B;
}
}
class SubCalculator
{
public int A { get; set; }
public int B { get; set; }
public int Subtract()
{
return A - B;
}
}Langage du code : JavaScript (javascript)
Dans l’exemple ci-dessus, deux classes sont déclarées : une pour les additions, l’autre pour les soustractions. Dans la fonction Main du programme principal, nous instancions ces deux classes pour les utiliser.
Contenu issu du site foxdevelop.com
Les déclarations de classes ne doivent pas obligatoirement être écrites de haut en bas. Vous pouvez déclarer vos classes en bas du fichier et les appeler depuis la fonction Main située au-dessus. Une classe n’est qu’un modèle, un plan. Le code ne s’exécute pas séquentiellement de haut en bas : l’exécution débute dans Main, et le programme va chercher le modèle correspondant lorsqu’il a besoin de la classe.

Membres de classe
Champs (Fields)
Un champ est une variable appartenant à une classe. Il peut s’agir d’un type natif ou d’un type défini par l’utilisateur, et autorise la lecture et l’écriture de données.
Type NomChamp;
class MyClass
{
int MyField; // champ de type int nommé MyField
}Langage du code : JavaScript (javascript)
Différence majeure avec C/C++ : C# ne dispose pas de variables globales. Tous les champs doivent être déclarés à l’intérieur d’un type (classe ou structure).
Règles d’initialisation des champs
(1) Initialisation implicite (sans affectation)
Le compilateur affecte automatiquement une valeur par défaut adaptée au type ; les valeurs par défaut varient selon chaque type.
int F1; // valeur par défaut 0
string F2; // valeur par défaut nullLangage du code : JavaScript (javascript)
Le tableau ci-dessous liste les types C# et leurs valeurs par défaut pour les champs. Cette règle ne s’applique pas aux variables locales, que le développeur doit initialiser manuellement.
Types valeur primitifs
| Type de données | Valeur par défaut | Description |
|---|---|---|
sbyte | 0 | Entier 8 bits signé |
byte | 0 | Entier 8 bits non signé |
short | 0 | Entier 16 bits signé |
ushort | 0 | Entier 16 bits non signé |
int | 0 | Entier 32 bits signé |
uint | 0 | Entier 32 bits non signé |
long | 0L | Entier 64 bits signé |
ulong | 0UL | Entier 64 bits non signé |
float | 0.0f | Flottant simple précision |
double | 0.0d | Flottant double précision |
decimal | 0.0m | Décimal haute précision |
char | '\0' (caractère nul, ASCII 0) | Caractère unique |
bool | false | Type booléen |
Énumération Enum | L’élément d’énumération correspondant à l’entier de base 0 | Les énumérations reposent sur des entiers, valeur par défaut 0 |
Structure struct | Tous les champs prennent leur valeur par défaut respective | Type valeur personnalisé, remis à zéro globalement |
Types référence
Tous les types référence ont pour valeur par défaut null, ce qui signifie qu’ils ne pointent vers aucun objet sur le tas (heap).
Autrement dit, aucune adresse mémoire n’est stockée. Rappelez-vous le schéma mémoire vu précédemment : un type référence conserve une adresse heap telle que 000001 01010. Lorsque la valeur est null, aucune adresse valide n’est enregistrée.
| Catégorie de type | Exemples de types | Valeur par défaut |
|---|---|---|
| Types référence natifs | string, object | null |
Classe personnalisée class | Person Student | null |
| Tableaux (toutes dimensions) | int[], string[,] | null |
| Délégués / Événements | Action, Func, delegate personnalisé | null |
Interface interface | Toute variable d’interface | null |
Exemples
string str; // par défaut null
Student jason; // classe personnalisée, par défaut null
int[] arr; // tableau, par défaut null
Action callback; // délégué, par défaut nullLangage du code : JavaScript (javascript)
Types acceptant la valeur null (Nullable / T?)
Ajouter un point d’interrogation ? après un type valeur primitif crée un nouveau type autorisant l’absence de valeur. Par exemple, int age; vaudra 0 par défaut si non initialisé. Si vous voulez représenter l’absence totale de valeur, écrivez int? age2;. age2 est alors un type nullable et peut recevoir null : int? age2 = null;
Un type nullable est un ValueType encapsulé, sa valeur par défaut est null, ce qui signifie « aucune valeur valide ».
| Syntaxe de déclaration | Valeur par défaut |
|---|---|
int? num | null |
bool? flag | null |
decimal? price | null |
class Test
{
int a; // automatiquement égal à 0
string b; // automatiquement égal à null
bool c; // automatiquement égal à false
}Langage du code : JavaScript (javascript)
(2) Initialisation explicite
Affectez une valeur au moment de la déclaration à l’aide de =. La valeur fournie doit être déterminable à la compilation ; les valeurs aléatoires ou les entrées utilisateur ne sont pas autorisées ici.
int days = 25;
string word = "foxdevelop";Langage du code : JavaScript (javascript)
(3) Écriture abrégée pour plusieurs champs du même type
Plusieurs variables d’un même type peuvent être déclarées ensemble, séparées par des virgules. Il est interdit de mélanger des types différents dans une même déclaration
int player, blood = 25;
string title, subTitle = "hi welcome to foxdevelop.com";Langage du code : JavaScript (javascript)
Méthodes (Methods)
Définition d’une méthode
Une méthode est un bloc de code nommé, réutilisable et exécutable, équivalent aux fonctions membres du C++. Lorsqu’elle est appelée, elle exécute son code interne puis rend la main à l’appelant. On distingue les méthodes avec valeur de retour et les méthodes sans valeur de retour.
Quatre composantes d’une méthode
- Type de retour : écrivez
voids’il n’y a pas de valeur renvoyée - Nom de la méthode
- Liste des paramètres : les parenthèses
()sont obligatoires même sans paramètre - Corps de la méthode : code exécutable encadré par
{}
class Program
{
static void Main(string[] args)
{
Robot robot = new Robot();
robot.SayHello();
}
}
class Robot
{
public void SayHello()
{
Console.WriteLine("Hello everyone");
Console.WriteLine("Welcome to visit foxdevelop.com");
}
}Langage du code : JavaScript (javascript)
Le mot-clé public devant public void SayHello() est un modificateur d’accès : il permet d’appeler cette fonction depuis l’extérieur de la classe sous la forme nomObjet.NomMéthode. Sans public, le niveau d’accès par défaut est private. Les méthodes privées ne sont accessibles qu’à l’intérieur de la classe ; on ne peut pas les appeler depuis l’extérieur même avec une instance telle que robot.

Création de variables de classe et d’instances
1. Caractéristiques fondamentales des types référence
Les classes appartiennent aux types référence. La mémoire est divisée en deux zones :
- Pile (Stack) : stocke les variables de référence (pointeurs vers des adresses mémoire)
- Tas (Heap) : stocke les données réelles des objets
2. Création pas à pas d’un objet
1 Déclaration seule de la variable de référence (seule la pile est allouée, aucun objet sur le tas)
Robot robot;
// Alloue uniquement un emplacement de référence sur la pile, valeur indéfinie, aucun objet sur le tas
Langage du code : JavaScript (javascript)

2 Allocation mémoire sur le tas avec l’opérateur new
new NomType();Langage du code : JavaScript (javascript)
- Alloue de la mémoire sur le tas et initialise automatiquement tous les champs avec leurs valeurs par défaut
- Retourne l’adresse de référence de l’objet sur le tas et l’affecte à la variable de la pile
robot = new Robot();
Langage du code : JavaScript (javascript)

class Program
{
static void Main(string[] args)
{
Robot robot;
robot = new Robot();
}
}
class Robot
{
void SayHello()
{
Console.WriteLine("Hello everyone");
Console.WriteLine("Welcome to visit foxdevelop.com");
}
}Langage du code : JavaScript (javascript)
3. Déclaration et instanciation sur une même ligne
Robot robot = new Robot();Langage du code : JavaScript (javascript)
class Program
{
static void Main(string[] args)
{
Robot robot = new Robot();
}
}Langage du code : JavaScript (javascript)