Back

.hovertable {
font-family: verdana,arial,sans-serif;
font-size:11px;

margin: -2px;
width: 100%;
overflow: hidden;
background: #FFF;
color: #024457;
border:2px solid #167F92;
border-radius: 10px;
border-collapse: separate;
}
.hovertable th {
background-color:#c3dde0;
border-width: 1px;
color:#024457;
padding: 8px;
border-: solid;
border-color: #a9c6c9;
}
.hovertable tr {
border: 1px solid #D9E4E6;

&:nth-child(odd) { // highlight the odd rows with a color
background-color: #EAF3F3;
}
.hovertable td {
border-width: 1px;
padding: 8px;
border-: solid;
border-color: #a9c6c9;
}

summary {
cursor: pointer;
font-size: 16px;
font-weight: bold;
text-decoration-line: overline underline line-through;
}

.coin {
background-color:#E4EFFF;
border:1px solid #9FC6FF;
padding:5px;
/*arrondir les coins en haut à gauche et en bas à droite*/
-moz-border-radius:10px;
-webkit-border-radius:10px;
border-radius:10px;
font-family: ‘Trebuchet MS’, Verdana, sans-serif;
}

c#: Les classes

c # les classes

 


//

Définitions
  • De façon générale, chaque fichier « .cs » contient exactement une classe. De plus, chaque fichier porte le nom de la classe qu’il contient (mais cela n’est pas obligatoire comme dans certains langages).
  • La classe est l’élément central de tout programme C# (et de manière générale de tout programme.NET).
  • Tout doit en effet être regroupé dans une classe. Tout programme exécutable (exe) est constitué d’une ou plusieurs classes dont l’une comprend la fonction statique Main, point d’entrée duprogramme (qu’il s’agisse d’une application console ou Windows).
  • Toute librairie (dll pour Dynamic Link Libraries) est également composée d’une ou plusieurs classes. Nous avons d’ailleurs rencontré le mot class dans tous les programmes du chapitre 1, où il n’a pourtant jamais été question de classe.
  • C# version 2 (Visual Studio 2005) a introduit les classes partielles, les génériques, une nouvelle technique d’itérateurs, le type Nullable, l’opérateur : pour l’accès à l’espace de noms global, les classes statiques et la protection d’accès sur les accesseurs de propriétés.
  • C# version 3 (Visual Studio 2008) a introduit les initialisations à partir des propriétés, le type var, les classes anonymes, les méthodes partielles et les expressions lambda.
  • C# version 4 (Visual Studio 2010) a introduit le type dynamic et ainsi le type « non typé », ce qui peut paraître contradictoire mais ouvre des perspectives, notamment d’interfaçage avec des langages non typés.
  • C# version 5 (Visual Studio 2012) cette version permet de programmer plus simplement des programmes asynchrones grâce à l’ajout des mots clés async et await.
  • C# version 6 (Visual Studio 2013) l’arrivée des constructeurs primaires.
  • C# version 7 (Visual Studio 2015) .
Types de classes en C # .Net:
  • Les classes abstraites (Abstract Class (somtimes called a Pure Virtual Class))
  • Partial Class
  • Sealed Class
  • Static Class
    1. Les classes abstraites
      • Le modificateur abstract indique que l’élément en cours de modification a une implémentation manquante ou incomplète.
      • Le modificateur abstract peut être utilisé avec des classes, des méthodes, des propriétés, des indexeurs et des événements.
      • Utilisez le modificateur abstract dans une déclaration de classe pour indiquer qu’une classe est destinée à être uniquement une classe de base d’autres classes.
      • Les membres marqués comme abstraits, ou inclus dans une classe abstraite, doivent être implémenté par les classes qui dérivent de la classe abstraite.
      • Une classe abstraite est une classe particulière qui ne peut pas être instanciée. Concrètement, cela veut dire que nous ne pourrons pas utiliser l’opérateur new.
      • De la même façon, une méthode abstraite est une méthode qui ne contient pas d’implémentation, c’est-à-dire pas de code.
      • Une classe abstraite est une classe dont toutes les méthodes n’ont pas été implémentées.
      • Elle n’est donc pas instanciable, mais sert avant tout à factoriser du code.
      • Une classe qui hérite d’une classe abstraite doit obligatoirement implémenter les méthodes manquantes (qui ont été elles-mêmes déclarées «abstraites» dans la classe parente). En revanche, elle n’est pas obligée de réimplémenter les méthodes déjà implémentées dans la classe parente (d’où une maintenance du code plus facile).
      • Les classes abstraites présentent les fonctionnalités suivantes :
        • Une classe abstraite ne peut pas être instanciée.
        • Une classe abstraite peut contenir des méthodes abstraites et des accesseurs.
        • Il est impossible de modifier une classe abstraite à l’aide du modificateur sealed (référence C#) car les deux modificateurs ont des significations opposées.
        • Le modificateur sealed empêche une classe d’être héritée et le modificateur abstract requiert qu’une classe soit héritée.
        • Une classe non abstraite dérivée d’une classe abstraite doit inclure des implémentations réelles de tous les accesseurs et méthodes abstraites hérités.

      • Pourquoi les classes abstraites ?
        • Lors de la conception d’une hiérarchie, on a besoin de créer des classes plus générales d’abord et différer l’implémentation à des étapes plus éloignées quand le comportement est très bien défini.
        • Quand on parle de figure géométrique, il est trop vague pour savoir comment calculer un périmètre, une surface : ces méthodes sont encore abstraites. Il est impossible de réaliser (implémenter) ces méthodes.
        • Par contre, un rectangle est une figure géométrique dont le calcul du périmètre et de la surface est connu, on peut alors implémenter ces méthodes qui sont très concrètes (pas du tout abstraites) pour un rectangle.
        • c sharp classe abstraite

          Exemple

          using System;
          abstract class FigureGeo
          { public abstract double Perimetre();
           public abstract double Surface();
          
           public override string ToString(){
           return string.Format("\nPerimetre : {0, 7:F2}, Surface :
           {1, 7:F2}", Perimetre(),Surface());
           }
          }
          /* Cette classe est CONCRÈTE car toutes les méthodes
           sont implénentées (réalisables)
          */ 

          Exemple

          class Cercle : FigureGeo
          { private double rayon;
          
           public Cercle(double rayon) {
           this.rayon = rayon;
           }
          
           public override double Perimetre() {
           return 2 * Math.PI * rayon;
           }
          
           public override double Surface() {
           return Math.PI * rayon * rayon;
           }
          
           public override string ToString() {
           return "Cercle de rayon : " + rayon +
           base.ToString();
           }
          }
          /* Cette classe est encore abstraite car on ne sait
           pas encore comment calculer la Surface. 

          Exemple

          abstract class Parallelogramme: FigureGeo
          { protected double cote1, cote2;
          
           // on a quand même le droit d'avoir de constructeur
           public Parallelogramme(double cote1, double cote2)
           {
           this.cote1 = cote1;
           this.cote2 = cote2;
           } 
          // cette méthode est "concrète" ici:
           public override double Perimetre() {
           return 2 * (cote1+cote2);
           }
          
           public override string ToString() {
           return "Les 2 cotes : " + cote1 + ", " + cote2
           + "\n" + base.ToString();
           }
          }
          /* Cette classe est CONCRÈTE car toutes les méthodes
           sont implémentées (réalisables)
          */ 
          class Rectangle
           : Parallelogramme
          {
          
           public Rectangle(double longueur, double largeur) :
           base(longueur, largeur)
           {
           }
          
           public override double Surface() {
           return cote1*cote2;
           }
           public override string ToString()
           {
           return "En tant qu'un rectangle : " + base.ToString();
           }
          
          }
          class Abstraite1
          {
           static void Main (string[] args)
           {
           Cercle c = new Cercle(10.0);
           Console.WriteLine(c);
          
           Rectangle r = new Rectangle(6.8, 3.2);
           Console.WriteLine("Infos du rectangle r :\n" + r);
           }
          }
          /* Exécution:
          Cercle de rayon : 10
          Perimetre : 62,83, Surface : 314,16
          Infos du rectangle r :
          En tant qu'un rectangle : Les 2 cotes : 6,8, 3,2
          Perimetre : 20,00, Surface : 21,76
          Press any key to continue
          

          Remarques:

        • On n’a pas le droit d’instancier (avec new) un objet d’une classe abstraite;
        • Une classe abstraite peut contenir des méthodes non abstraites;
        • Une classe abstraite peut contenir des constructeurs pour faire appeler par ses classes dérivées ( avec base(. . .))
        • Une méthode abstraite est automatiquement virtuelle (mais on n’a pas le droit de fournir ce mot virtual sur l’en-tête). Ces méthodes abstraites peuvent être toutes ou en partie redéfinies (override) dans une classe dérivée.
        • Les classes partielles

        • Source:MSDN

          • Dans C#, vous pouvez créer une classe (la même classe) dans différents fichiers. Ceci signifie que vous pouvez commencer une classe dans un fichier et la continuer dans un autre fichier ou dans d’autres fichiers. Ceci est désigné sous le nom de exécution partielle.
          • Il est possible de fractionner la définition d’une classe ou d’un struct, ou d’une interface ou d’une méthode sur deux fichiers sources ou plus. Chaque fichier source contient une section de la définition de type ou de méthode, et toutes les parties sont combinées lorsque l’application est compilée.
          • Il est souhaitable de fractionner une définition de classe dans plusieurs situations :
            • Dans le cadre de projets volumineux, la répartition d’une classe en plusieurs fichiers distincts permet à plusieurs programmeurs d’y travailler simultanément.
            • Lorsque vous travaillez avec une source générée automatiquement, le code peut être ajouté à la classe sans qu’il soit nécessaire de recréer le fichier source. Visual Studio utilise cette approche lors de la création de formulaires Windows Forms, de code wrapper de service Web, etc. Vous pouvez créer un code qui utilise ces classes sans avoir à modifier le fichier créé par Visual Studio.
            • Pour fractionner une définition de classe, utilisez le modificateur de mot clé partial, comme indiqué ici :
            • public partial class Employee
              {
                  public void FaireTravail()
                  {
                  }
              }
              
              public partial class Employee
              {
                  public void AllerDiner()
                  {
                  }
              }
          • Le mot clé partial indique que d’autres parties de la classe, du struct ou de l’interface peuvent être définies dans l’espace de noms.
          • Toutes les parties doivent utiliser le mot clé partial.
          • Toutes les parties doivent être disponibles lors de la compilation pour former le type final.
          • Toutes les parties doivent avoir la même accessibilité : public, private, etc.
          • Si une partie est déclarée comme abstract, l’ensemble du type est considéré comme abstract.
          • Si une partie est déclarée comme sealed, l’ensemble du type est considéré comme sealed.
          • Si une partie déclare un type de base, l’ensemble du type hérite de cette classe.
          • Exemple:

            Dans l’exemple suivant, les champs et le constructeur de la classe, CoOrds, sont déclarés dans une définition de classe partielle, et le membre, PrintCoOrds, est déclaré dans une autre définition de classe partielle.

            public partial class CoOrds
            {
                private int x;
                private int y;
            
                public CoOrds(int x, int y)
                {
                    this.x = x;
                    this.y = y;
                }
            }
            
            public partial class CoOrds
            {
                public void PrintCoOrds()
                {
                    Console.WriteLine("CoOrds: {0},{1}", x, y);
                }
            
            }
            
            class TestCoOrds
            {
                static void Main()
                {
                    CoOrds myCoOrds = new CoOrds(10, 15);
                    myCoOrds.PrintCoOrds();
            
                    // Keep the console window open in debug mode.
                    Console.WriteLine("Press any key to exit.");
                    Console.ReadKey();
                }
            }
            // Output: CoOrds: 10,15

          Exercice d’application:

          1. Ouvrir Microsoft Visual C# et créez une application de console appelée TpClassePartielle
          2. TpClassePartielle

          3. Ajoutez un fichier source
            1. Cliquez avec le bouton droit de votre sourie sur TpClassePartielle dans l’Explorateur de solution.
            2. Cliquez sur nouvel élément.
            3. Dans les modèles énumérés, sélectionnez le fichier de code.
            4. Nommez le fichier de code “CircleA”.
            5. Cliquez sur le bouton ajouter.
            classepartielle_nouvel élément
          4. Copiez le code suivant et le collez dans votre fichier
          5. public partial class Cercle
            {
                private double _rayon;
            
                public double Rayon
                {
                    get { return (this._rayon <= 0) ? 0.00 : this._rayon; }
                    set { this._rayon = value; }
                }
            
                public double Diametre
                {
                    get { return this.Rayon * 2; }
                }
            
                public double Circonference
                {
                    get { return Diametre * 3.14159; }
                }
            
                public double Surface
                {
                    get { return this.Rayon * this.Rayon * 3.14159; }
                }
            }
          6. Créez un deuxième fichier de type fichier de code et le nommez “CercleB” fichier
          7. Copiez le code suivant et le collez dans votre fichier
          8. using System;
            
            public partial class Cercle
            {
                public Cercle()
                {
                    this.Rayon = 0.00;
                }
            
                public Cercle(double rayon)
                {
                    this.Rayon = rayon;
                }
            
                public void Present()
                {
                    Console.WriteLine("Rayon:        {0}", this.Rayon);
                    Console.WriteLine("Diamètre:      {0}", this.Diametre);
                    Console.WriteLine("Circonférence: {0}", this.Circonference);
                    Console.WriteLine("Surface:          {0}", this.Surface);
                }
            }
          9. Maintenant il ne vous reste que le changement de votre classe program et votre méthode main pour exécuter vos classes récemment crées
          10. Copiez le code suivant et le collez dans votre fichier
          11. using System;
            using System.Collections.Generic;
            using System.Linq;
            using System.Text;
            using System.Threading.Tasks;
            
            namespace TpClassePartielle
            {
                class Program
                {
                    static Cercle Initialize()
                    {
                        Console.Write("Entrez le rayon de votre cercle: ");
                        double ray = double.Parse(Console.ReadLine());
            
                        Cercle c = new Cercle(ray);
                        return c;
                    }
                    static int Main()
                    {
                        Console.WriteLine(
                       "Bienvenue dans apcpedagogie votre site d'autoformation\n==============================");
                        Console.WriteLine(
                        "Cette application vous permet de traiter un cercle");
                        Cercle circ = Initialize();
            
                        Console.WriteLine("\n==============================");
                        Console.WriteLine("Caractéristiques de votre cercle en cm");
                        Console.WriteLine("------------------------------");
                        circ.Present();
                        Console.WriteLine("==============================\n");
             Console.ReadLine();
                        return 0;
                       
                    }
                }
            }
            
            
          12. Vous obtiendrez le résultat suivant:
          13. resultat classe Partielle
          14. Créez deux autres fichiers cylindreA et cylindreB comme vous l’avez fait pour les cercles
          15. public partial class Cercle
            {
                private double _rayon;
            
                public double Rayon
                {
                    get { return (this._rayon <= 0) ? 0.00 : this._rayon; }
                    set { this._rayon = value; }
                }
            
                public double Diametre
                {
                    get { return this.Rayon * 2; }
                }
            
                public double Circonference
                {
                    get { return Diametre * 3.14159; }
                }
            
                public double Surface
                {
                    get { return this.Rayon * this.Rayon * 3.14159; }
                }
            }
          16. Même chose pour cylindreB
          17. using System;
            
            public partial class Cylindre : Cercle
            {
                // Ceci est le constructeur par défaut du cylindre
                // Ce constructeur suppose que nous ne disposons pas de dimension
                public Cylindre()
                {
                    this.Rayon = 0.00;
                }
            
                // Ce constructeur suppose qu'il existe un rayon
                // Le rayon aurait pu être spécifié sur un cercle de parent
                public Cylindre(double hauteur)
                {
                    this.Hauteur = hauteur;
                }
            
                // Ce constructeur peut être utilisé pour spécifier
                // le rayon de la base et la hauteur du volume
                // Le rayon peut également avoir été définie par un cercle de parent
                public Cylindre(double rayon, double hauteur)
                {
                    this.Rayon = rayon;
                    this.Hauteur = hauteur;
                }
                
                new public void Present()
                {
                    Console.WriteLine("Hauteur:        {0}", this.Hauteur);
                    Console.WriteLine("Surface Latéral:  {0}", this.SurfaceLateral);
                    Console.WriteLine("Surface totale:    {0}", this.SurfaceTotale);
                    Console.WriteLine("Volume:        {0}", this.Volume);
                }
            }
            
          18. Enfin modifiez la classe program comme suit;
          19. using System;
            using System.Collections.Generic;
            using System.Linq;
            using System.Text;
            using System.Threading.Tasks;
            
            namespace TpClassePartielle
            {
                class Program
                {
                    static Cercle Initialize()
                    {
                        Console.Write("Entrez le rayon de votre cercle: ");
                        double ray = double.Parse(Console.ReadLine());
            
                        Cercle c = new Cercle(ray);
                        return c;
                    }
                    static double ObtenezHauteur()
                    {
                        Console.Write("Entrer une hauteur: ");
                        double hgt = double.Parse(Console.ReadLine());
                        return hgt;
                    }
                    static int Main()
                    {
                        Console.WriteLine(
                       "Bienvenue dans apcpedagogie votre site d'autoformation\n==============================");
                        Console.WriteLine(
                        "Cette application vous permet de traiter un cylindre");
                        Cercle circ = Initialize();
                        double hauteur = ObtenezHauteur();
                        Cylindre cldr = new Cylindre(circ.Rayon, hauteur);
                        Console.WriteLine("\n================================");
                        Console.WriteLine("=//=Caractéristiques de cylindre=//=");
                        Console.WriteLine("================================");
                        Console.WriteLine(" =-= Caractéristiques de base =-=");
                        Console.WriteLine("--------------------------------");
                        circ.Present();
                        Console.WriteLine("------------------------------");
                        Console.WriteLine("=-= Caractéristiques de volume =-=");
                        cldr.Present();
                        Console.WriteLine("================================\n");
            
                        /*Console.WriteLine("\n==============================");
                        Console.WriteLine("Caractéristiques de votre cercle en cm");
                        Console.WriteLine("------------------------------");
                        circ.Present();
                        Console.WriteLine("==============================\n");*/
            
            
            
                        Console.ReadLine();
                        return 0;
                       
                    }
                }
            }
            
          20. Vous obtiendrez le résultat suivant:
          21. class partiel exemple cylindre

          22. Les classes scellés(sealed)
            • Une classe scellée est une classe dont il est impossible d’hériter.
            • Il est possible que vous n’ayez pas envie que quelqu’un développe une classe héritant d’une classe vous appartenant. Dans ce cas, vous dev
            • rez déclarer cette classe comme scellée.
            • Vous pouvez faire cela grâce au mot-clé sealed (équivalent de final en Java). Le code suivant vous montre un exemple de classe scellée :
            • sealed class ClasseScellee {
              
              } 

              .

            • Le modificateur scellé est utilisé pour empêcher la dérivation d’une classe. Une erreur se produit si une classe scellée est spécifié comme la classe de base d’ une autre classe.
            • class ClasseDerivee : ClasseScellee {
              }
              

              .

              Retenir
              1. Une classe, ce qui limite l’héritage pour des raisons de sécurité est déclarée, classe scellée.
              2. classe Sealed est la dernière classe dans la hiérarchie.
              3. classe scellée peut être une classe dérivée, mais ne peut pas être une classe de base.
              4. Une classe scellée ne peut pas être aussi une classe abstraite. Parce que la classe abstraite doit fournir la fonctionnalité d’héritage.

          23. Les classes statiques
            • Une classe statique ne peut comporter que des champs et méthodes statiques.
            • Une classe statique ne peut servir de classe de base pour l’héritage.
            • Une classe statique ne peut être instanciée.
            • Une classe statique ne peut pas être instanciée, vous ne pouvez pas utiliser le mot clé new pour créer une variable du type classe.
            • Une classe statique peut être utilisée comme conteneur commode pour les ensembles de méthodes qui opèrent simplement sur des paramètres d’entrée et n’ont pas à obtenir ou définir de champs d’instance internes.
            • La classe suivante est déclarée comme statique et contient uniquement des méthodes statiques:
            • CompanyEmployee de classe statique
               {
                   DoSomething public static void () {} /*...*/
                   public static void DoSomethingElse () {} /*...*/
               }
            Les objets et les classes
              classes objet c#

            • Un objet ne désigne rien d’autre qu’une variable d’une classe donnée (on dit aussi d’un type donné).
            • On parle aussi d’instance (à la place d’objet) et d’instanciation d’une classe donnée, pour l’opération de création d’un objet. L’objet est donc de l’ordre du concret : il occupe de la mémoire au moment d’exécuter le programme (nous allons bientôt expliciter cette occupation mémoire).
            • À une même classe peut correspondre plusieurs objets (autrement dit plusieurs variables).
            • Au moment d’exécuter le programme, les différents objets occupent des zones de mémoire distinctes. À ce moment, la classe, elle, n’occupe aucune zone de mémoire : il s’agissait d’une information à l’usage du compilateur.
            • Un objet est une instance d’une classe, on crée un nouvel objet à partir d’une classe
            • Sachant qu’un objet en programmation c’est comme un objet du monde réel mais ce n’est pas forcément restreint au matériel. Un chien est un objet.
            • Des concepts comme l’amour ou une idée sont également des objets, tandis qu’on ne dirait pas cela dans le monde réel.
            • les classes permettent de décrire les attributs et les opérations qui sont associés à un objet. Par l’exemple, l’objet Personne peut contenir :
              • Nom, Prénom, Age et Sexe comme attributs,
                Marcher(), Manger(), Courir(), PasserLaTondeuse()

            • comme opérations.
            • Une classe peut être vue comme un « moule » permettant de fabriquer des « instances » d’un objet. Par exemple, les
              personnes « Mohamed » et « Ahmed » sont des instances de la classe Personne précédemment décrite.
            • Les termes classe et objet sont parfois employés indifféremment, mais en réalité, les classes décrivent le type des objets, alors que ces derniers sont des instances utilisables de classes.
            • Ainsi, l’opération de création d’un objet est appelée instanciation.
            • Si l’on reprend l’analogie avec un plan de construction, une classe est un plan, et un objet est un bâtiment construit à partir de ce plan.

            • classe: Plan —–instanciation——-> Objet: bâtiment

            Déclarer et instancier des classes
            • Les classes sont déclarées à l’aide du mot clé class, comme illustré dans l’exemple suivant :
            • public class Personne
              {
                  //Constructeurs,Destructeurs,Constantes,Champs,Méthodes,Propriétés,Indexeurs,Opérateurs
                  //,Événements,Délégués,Classes,Interfaces,Structures...
              }
            • Le mot clé class est précédé par le niveau d’accès.
            • public étant utilisé dans ce cas, n’importe qui peut créer des objets à partir de cette classe. Le nom de la classe suit le mot clé class.
            • Le reste de la définition est le corps de la classe, où le comportement et les données sont définis.
            • Les champs, propriétés, méthodes et événements d’une classe sont désignés collectivement par le terme membres de classe.
            Les membres d’une classe

            • Les classes et structs ont des membres qui représentent leurs données et comportement.
            • Les membres d’une classe incluent tous les membres déclarés dans la classe, avec tous les membres déclarés dans toutes les classes dans leur hiérarchie d’héritage.Les membres privés dans les classes de base sont hérités mais ne sont pas accessibles à partir de classes dérivées.
            Exercices de simulation

            Exercice apcpedagogieClasses001

            • Ouvrir Microsoft Visual C# et créez une application de console appelée TpClasseApprenant
            • Créer la classe Article caractérisée par les attributs : NumCin, Nom, Prenom, DateNaissance.
            • Ces attributs doivent seulement être accessibles par le biais des accesseurs (get / set) en lecture/écriture mis en œuvre par les propriétés.
            • Ajouter les constructeurs suivants :
              • Un constructeur par défaut
              • Un constructeur initialisant tous les attributs.
              • Un Constructeur qui permet de renseigner la NumCin , le Nom et le Prenom lors de l’instanciation
              • Un constructeur de recopie
            • Ajouter la méthode AfficherApprenant() qui affiche les informations de l’apprenant.

            Sommaire du cours c#

            (adsbygoogle = window.adsbygoogle || []).push({});

          Abonnez vous à notre chaîne YouTube gratuitement