Getsuyodev, Programming is mainly used when constructing an application. Programming requires knowledge of application domains, algorithms, and programming language expertise. Programming can be developed in different logic based on developer knowledge.

C Sharp – Héritage

Programmation en C# (C Sharp)



Toutes les classes C# dérivent automatiquement d’une seule et même classe ancêtre : la classe object.

En C# le mot-clef pour indiquer la dérivation (héritage) à partir d’une autre classe est le symbole deux points ‘ : ‘, lorsqu’il est omis c’est donc que la classe hérite automatiquement de la classe object.

Une classe sealed en C# correspond à une classe non héritable.

Accès à la super classe ou classe mère :

  • Il existe en C# un mécanisme déclenché par un mot clef qui permet d’accéder à la classe mère (classe immédiatement au dessus): ce mot est base.
  • Le mot clef base est utilisé pour accéder à tous les membres visibles de la classe mère à partir d’une classe fille dérivée directement de cette classe mère ( la super-classe en Java).
  • Le mot clef base est utilisé pour initialiser un constructeur de classe fille à partir d’un constructeur de classe mère.

Lors de l’héritage d’une classe fille, si un constructeur d’instance C# de la classe fille ne fait pas figurer explicitement l’initialiseur de constructeur base( ), c’est qu’en fait un initialiseur de constructeur ayant la forme base( ) lui a été fourni implicitement.

Sans initialiseur explicite, tout objet de classe fille est à minima et par défaut, instancié comme un objet de classe de mère de base.



using System;

class clA 
{
public string nom;

public clA( )
{
nom = "inconnu";
}
public clA( string nom )
{
this.nom = nom;
}
public virtual string methode1( string s )// methode1virtuelle : redéfinissable
{
return s+" ** ";
}
}

class clB : clA
{
public string prenom="......";

public clB( ) 
{
// constructeur vide car appel implicite à base( )
}

public clB( string nom, string prenom ) : base(nom) 
{   
// constructeur appel explicte à base( string s)
this.prenom = prenom;
}
public override string methode1( string s )// redéfini methode1 de classe mère
{ // appel à méthode1 de la classe mère par base
return " >> "+base.methode1(s);
}
}

class Exercice
{
public static void Main(string[ ] args) // méthode principale de lancement de l'exécution
{
clB  x  = new clB( );
Console.WriteLine( "x.nom = {0} ,  x.prenom = {1}", x.nom, x.prenom ); 

x  = new clB("Lavarède","cinqSous" );
Console.WriteLine( "x.nom = {0} ,  x.prenom = {1}", x.nom, x.prenom ); 
Console.WriteLine( "x.methode1('test') = "+ x.methode1("test") ); 

// polymorphisme d'objet y déclaré en clA puis instancié en clB :
clA  y  = new clB("Martin","jean" );
Console.WriteLine( "y.nom = {0} ", y.nom); //le prenom n'est pas accessible car y est déclaré en clA

// transtypage de l'objet y en type clB (permet l'acès au prénom):
clB z =(clB)y;
Console.WriteLine( "z.nom = {0} ,  z.prenom = {1}", z.nom, z.prenom ); 

Console.ReadLine();
}
}



Comments are closed, but trackbacks and pingbacks are open.

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More