Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Langue C

Héritage C#

Héritage C#

Dans ce tutoriel, nous allons découvrir l'héritage C# et ses types à l'aide d'exemples.

En C#, l'héritage nous permet de créer une nouvelle classe à partir d'une classe existante. C'est une fonctionnalité clé de la programmation orientée objet (POO).

La classe à partir de laquelle une nouvelle classe est créée est appelée classe de base (parent ou superclasse). Et, la nouvelle classe est appelée classe dérivée (enfant ou sous-classe)

La classe dérivée hérite des champs et des méthodes de la classe de base. Cela aide à la réutilisation du code en C#.

Comment effectuer l'héritage en C# ?

En C#, on utilise le : symbole pour effectuer l'héritage. Par exemple,

class Animal {  
  // fields and methods
} 

// Dog inherits from Animal
class Dog : Animal {
  // fields and methods of Animal 
  // fields and methods of Dog 
}

Ici, nous héritons de la classe dérivée Dog de la classe de base Animal . Le chien la classe peut maintenant accéder aux champs et aux méthodes de Animal classe.

Exemple :Héritage C#

using System;

namespace Inheritance {

  // base class
  class Animal { 

    public string name;

    public void display() {
      Console.WriteLine("I am an animal");
    }
    
  } 
  
  // derived class of Animal 
  class Dog : Animal {
    
    public void getName() {
      Console.WriteLine("My name is " + name);
    }
  }

  class Program {

    static void Main(string[] args) {

      // object of derived class
      Dog labrador = new Dog();

      // access field and method of base class
      labrador.name = "Rohu";
      labrador.display();

      // access method from own class
      labrador.getName();

      Console.ReadLine();
    }

  }
}

Sortie

I am an animal
My name is Rohu

Dans l'exemple ci-dessus, nous avons dérivé une sous-classe Chien de la superclasse Animal . Remarquez les déclarations,

labrador.name = "Rohu";

labrador.getName();

Ici, nous utilisons labrador (objet de Chien) pour accéder au nom et afficher() de l'Animal classer. Cela est possible car la classe dérivée hérite de tous les champs et méthodes de la classe de base.

De plus, nous avons accédé au name champ à l'intérieur de la méthode du Chien classe.

est-une relation

En C#, l'héritage est une relation is-a. Nous n'utilisons l'héritage que s'il existe une relation is-a entre deux classes. Par exemple,

  • Chien est un Animal
  • Pomme est un Fruit
  • Voiture est un Véhicule

Nous pouvons dériver Chien de Animal classer. De même, Apple à partir de fruits classe et Voiture de Véhicule classe.

Membres protégés dans l'héritage C#

Lorsque nous déclarons un champ ou une méthode comme protected , il n'est accessible qu'à partir de la même classe et de ses classes dérivées.

Exemple :Membres protégés par héritage

using System;

namespace Inheritance {

  // base class
  class Animal { 
    protected void eat() {
      Console.WriteLine("I can eat");
    }
  } 
  
  // derived class of Animal 
  class Dog : Animal {
     static void Main(string[] args) {

      Dog labrador = new Dog();

      // access protected method from base class
      labrador.eat();

      Console.ReadLine();
    }
  }
}

Sortie

I can eat

Dans l'exemple ci-dessus, nous avons créé une classe nommée Animal . La classe inclut une méthode protégée eat() .

Nous avons dérivé le Chien classe de Animal classer. Remarquez la déclaration,

labrador.eat();

Depuis le protected accessible à partir de classes dérivées, nous pouvons accéder à eat() méthode du Chien classe.

Types d'héritage

Il existe les types d'héritage suivants :

1. Héritage unique

En héritage unique, une seule classe dérivée hérite d'une seule classe de base.

2. Héritage à plusieurs niveaux

Dans l'héritage multiniveau, une classe dérivée hérite d'une base, puis la même classe dérivée agit comme une classe de base pour une autre classe.

3. Héritage hiérarchique

Dans l'héritage hiérarchique, plusieurs classes dérivées héritent d'une seule classe de base.

4. Héritage multiple

Dans l'héritage multiple, une seule classe dérivée hérite de plusieurs classes de base. C# ne prend pas en charge l'héritage multiple. Cependant, nous pouvons obtenir un héritage multiple via des interfaces.

5. Héritage hybride

L'héritage hybride est une combinaison de deux ou plusieurs types d'héritage. La combinaison de l'héritage multiniveau et hiérarchique est un exemple d'héritage hybride.

Remplacement de méthode dans l'héritage C#

Si la même méthode est présente à la fois dans la classe de base et dans la classe dérivée, la méthode de la classe dérivée remplace la méthode de la classe de base. C'est ce qu'on appelle le remplacement de méthode en C#. Par exemple,

using System;

namespace Inheritance {

  // base class
  class Animal { 
    public virtual void eat() {

      Console.WriteLine("I eat food");
    }
  } 
  
  // derived class of Animal 
  class Dog : Animal {

    // overriding method from Animal
    public override void eat() {

      Console.WriteLine("I eat Dog food");
    }     
  }
  class Program {

    static void Main(string[] args) {
      // object of derived class
      Dog labrador = new Dog();

      // accesses overridden method
      labrador.eat();
    }
  }
}

Sortie

I eat Dog food

Dans l'exemple ci-dessus, le eat() La méthode est présente à la fois dans la classe de base et dans la classe dérivée.

Lorsque nous appelons eat() en utilisant le chien objet labrador ,

labrador.eat();

la méthode dans Chien est appelé. C'est parce que la méthode à l'intérieur de Dog remplace la même méthode dans Animal .

Remarquez, nous avons utilisé virtual et remplacer avec les méthodes de la classe de base et de la classe dérivée respectivement. Ici,

  • virtual - permet à la méthode d'être remplacée par la classe dérivée
  • override - indique que la méthode remplace la méthode de la classe de base

mot clé de base dans l'héritage C#

Dans l'exemple précédent, nous avons vu que la méthode de la classe dérivée remplace la méthode de la classe de base.

Cependant, que se passe-t-il si nous voulons également appeler la méthode de la classe de base ?

Dans ce cas, nous utilisons le base mot-clé pour appeler la méthode de la classe de base à partir de la classe dérivée.

Exemple :mot-clé de base dans l'héritage C#

using System;

namespace Inheritance {

  // base class
  class Animal { 
    public virtual void eat() {

      Console.WriteLine("Animals eat food.");
    }
  } 
  
  // derived class of Animal 
  class Dog : Animal {

    // overriding method from Animal
    public override void eat() {
      
      // call method from Animal class
      base.eat();
      
      Console.WriteLine("Dogs eat Dog food.");
    }     
  }
  class Program {

    static void Main(string[] args) {

      Dog labrador = new Dog();
      labrador.eat();
    }
  }
}

Sortie

Animals eat food.
Dogs eat Dog food.

Dans l'exemple ci-dessus, le eat() est présente à la fois dans la classe de base Animal et la classe dérivée Chien . Remarquez la déclaration,

base.eat();

Ici, nous avons utilisé le base mot-clé pour accéder à la méthode de Animal classe du Chien classe.

Importance de l'héritage en C#

Pour comprendre l'importance de l'héritage, considérons une situation.

Supposons que nous travaillions avec des polygones réguliers tels que des carrés, des rectangles, etc. Et, nous devons trouver le périmètre de ces polygones en fonction de l'entrée.

1. Puisque la formule pour calculer le périmètre est commune à tous les polygones réguliers, nous pouvons créer un RegularPolygon classe et une méthode calculatePerimeter() pour calculer le périmètre.

class RegularPolygon {

  calculatePerimeter() {
    // code to compute perimeter
  }
}

2. Et hériter de Carré et Rectangle classes du RegularPolygon classer. Chacune de ces classes aura des propriétés pour stocker la longueur et le nombre de côtés car ils sont différents pour tous les polygones.

class Square : RegularPolygon {

  int  length = 0;
  int sides = 0;
}

On passe la valeur de la longueur et côtés à calculateperimeter() pour calculer le périmètre.

C'est ainsi que l'héritage rend notre code réutilisable et plus intuitif.

Exemple :importance de l'héritage

using System;

namespace Inheritance {

  class RegularPolygon {

      public void calculatePerimeter(int length, int sides) {

        int result = length * sides;
        Console.WriteLine("Perimeter: " + result);
      }
  }

  class Square : RegularPolygon {

    public int  length = 200;
    public int sides = 4;
    public void calculateArea() {

      int area = length * length;
      Console.WriteLine("Area of Square: " + area);
    }
  }

 class Rectangle : RegularPolygon {

    public int length = 100;
    public int breadth = 200;
    public int sides = 4;

    public void calculateArea() {
    
      int area = length * breadth;
      Console.WriteLine("Area of Rectangle: " + area);
    }
  }

  class Program {

    static void Main(string[] args) {

      Square s1 = new Square();
      s1.calculateArea();
      s1.calculatePerimeter(s1.length, s1.sides);
      

      Rectangle t1 = new Rectangle();
      t1.calculateArea();
      t1.calculatePerimeter(t1.length, t1.sides);
      
    }
  }
}     

Sortie

Area of Square: 40000
Perimeter: 800
Area of Rectangle: 20000
Perimeter: 400

Dans l'exemple ci-dessus, nous avons créé un RegularPolygon classe qui a une méthode pour calculer le périmètre du polygone régulier.

Ici, le Carré et Rectangle hérite de RegularPolygon .

La formule pour calculer le périmètre est commune à tous, nous avons donc réutilisé le calculatePerimeter() méthode de la classe de base.

Et puisque la formule pour calculer la surface est différente pour différentes formes, nous avons créé une méthode distincte à l'intérieur de la classe dérivée pour calculer la surface.


Langue C

  1. Classe et objet C#
  2. Modificateurs d'accès C#
  3. Mot-clé statique C#
  4. Classe abstraite et méthode C#
  5. Classe imbriquée C#
  6. Classe partielle C# et méthode partielle
  7. Classe et méthode scellées C#
  8. Polymorphisme en C++
  9. Abstraction de données en C++