Si tu te poses cette question, je pense qu'il serait bon de consulter préalablement les pages du chapitre "Programmer", et plus précisément les notions d'orienté objet, d'héritage, et de polymorphisme.
Dans le framework .NET, nous emploierons peu le terme de superclasse au profit de classe de base.
Comme les structures ne participent pas au mécanisme d'héritage, nos classes ne pourront pas hériter d'une structure, mais seulement d'une autre classe (et toutes les classes héritent en fait de la classe Object).
Comme dans d'autres langages (par exemple Java), C# ne nous permet pas d'héritage multiple. En effet, en C++ nous pouvions créer une classe qui hérite de plusieurs classes parentes, mais cette méthode peut se révéler dangereuse si nous ne maîtrisons pas totalement notre arborescence.
Nous pouvons tout de même hériter de plusieurs classes, dans la mesure ou nous remontons l'arborescence, mais ce n'est pas de l'héritage multiple car chaque classe n'hérite que d'un seul parent direct.
Par exemple, la classe C hérite de la classe B qui hérite elle même de la classe A.
Nous pouvons substituer utiliser l'implémentation de plusieurs interfaces comme substitut del'héritage multiple, mais nous verrons ceci plus tard.
Pour notre exemple, nous pouvons reprendre les classes Personne et Lecteur que nous avons utilisé pour expliquer l'héritage en Java.
public class Personne { private String nom; private String prenom; ///<summary> ///Constructeur ///</summary> ///<param name="nom">Nom de la personne</param> ///<param name="prenom">Prénom de la personne</param> public Personne(String nom, String prenom) { this.nom = nom; this.prenom = prenom; } ///<summary> ///Retourne le nom de la personne ///</summary> public String getNom() { return nom; } ///<summary> ///Retourne le prénom de la personne ///</summary> public String getPrenom() { return prenom; } }
public class Lecteur : Personne { private DateTime inscription; private ArrayList emprunts; ///<summary> ///Constructeur ///</summary> ///<param name="nom">Nom du lecteur</param> ///<param name="prenom">Prénom du lecteur</param> ///<param name="inscription">Date d'inscription</param> public Lecteur(String nom, String prenom, DateTime inscription) : base (nom, prenom) { this.inscription = inscription; } ///<summary> ///Retourne la liste des livres empruntés par ce lecteur en ce moment ///</summary> public ArrayList getEmprunts() { return emprunts; } ///<summary> ///Retourne la date d'inscription de ce lecteur ///</summary> public DateTime getInscription() { return inscription; } ///<summary> ///Ajoute un livre aux livres empruntés par ce lecteur en ce moment ///</summary> ///<param name="livre">Livre emprunté</param> public void emprunte(Livre livre) { emprunts.Add(livre); } ///<summary> ///Rapporte un livre à la bibliothèque ///Enlève donc le livre de ses livres empruntés en ce moment ///</summary> ///<param name="livre">Livre rapporté</param> public void rapporte(Livre livre) { emprunts.Remove(livre); } }
public class Lecteur : Personne
Nous avons utilisé l'opérateur : qui signifie que la classe Lecteur est une sous classe (ou classe dérivée) de Personne.
public Lecteur(String nom, String prenom, DateTime inscription) : base (nom, prenom) { this.inscription = inscription; }
Dans notre constructeur, nous recevons un nom et un prénom définissant la personne. Nous n'avons défini ces variables nulle-part dans le code de la classe Lecteur, ce sont donc des propriétés que l'objet de type Lecteur hérite de la classe Personne.
Pour cette raison, afin d'éviter toute confusion possible, nous utilisons le constructeur de la classe de base (Personne) pour instancier ces valeurs.
La date d'inscription est une des caractéristiques de notre Lecteur, nous pouvons directement affecter la valeur de la date d'inscription à la variable inscription au moment de l'appel au constructeur de Lecteur, car nous considérons qu'un lecteur n'existe qu'à partir du moment où il est inscrit dans la bibliothèque. Nous pouvons remarquer ici l'emploi du mot clé this qui désigne la classe elle-même.
Nous pouvons tester ces classes en créant un petit programme en mode console.
class Program { static void Main(string[] args) { Console.WriteLine(pers.getPrenom() + " " + pers.getNom()); Console.WriteLine(lecteur.getPrenom() + " " + lecteur.getNom() + " " + lecteur.getInscription()); Console.WriteLine("\n\nPress any key to exit..."); Console.ReadKey(); } }
Ce programme affiche les lignes suivantes :
Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.
9 mots clés dont 0 définis manuellement (plus d'information...).
Avertissement
Cette page ne possède pas encore de mots clés manuels, ceci est donc un exemple automatique (les niveaux de pertinence sont fictifs, mais les liens sont valables). Pour tester le nuage avec une page qui contient des mots définis manuellement, vous pouvez cliquer ici.Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher le nuage de mots clés.
Recherche (afficher)
Utilisateur (masquer)
Navigation (masquer)
Apparence (afficher)
Stats (afficher)
Citation (masquer)