Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C# Overerving

C#-overerving

In deze zelfstudie leren we over C#-overerving en zijn typen met behulp van voorbeelden.

In C# kunnen we met overerving een nieuwe klasse maken van een bestaande klasse. Het is een belangrijk kenmerk van Object-Oriented Programming (OOP).

De klasse waaruit een nieuwe klasse wordt gemaakt, staat bekend als de basisklasse (bovenliggende of superklasse). En de nieuwe klasse heet afgeleide klasse (kind of subklasse)

De afgeleide klasse erft de velden en methoden van de basisklasse. Dit helpt bij de herbruikbaarheid van code in C#.


Hoe overerving in C# uitvoeren?

In C# gebruiken we de : symbool om overerving uit te voeren. Bijvoorbeeld,

class Animal {  
  // fields and methods
} 

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

Hier erven we de afgeleide klasse Hond uit de basisklasse Animal . De Hond class heeft nu toegang tot de velden en methoden van Animal klasse.


Voorbeeld:C#-overerving

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();
    }

  }
}

Uitvoer

I am an animal
My name is Rohu

In het bovenstaande voorbeeld hebben we een subklasse afgeleid Hond uit de superklasse Animal . Let op de uitspraken,

labrador.name = "Rohu";

labrador.getName();

Hier gebruiken we labrador (object van hond) om toegang te krijgen tot de naam en display() van het Dier klas. Dit is mogelijk omdat de afgeleide klasse alle velden en methoden van de basisklasse erft.

We hebben ook toegang gekregen tot de naam veld binnen de methode van de Hond klasse.


is-een relatie

In C# is overerving een is-a-relatie. We gebruiken alleen overerving als er een is-a-relatie is tussen twee klassen. Bijvoorbeeld,

  • Hond is een dier
  • Appel is een Fruit
  • Auto is een Voertuig

We kunnen Hond . afleiden van Dier klas. Evenzo, Apple van Fruit klasse en Auto van Voertuig klasse.


beschermde leden in C# Inheritance

Wanneer we een veld of methode declareren als protected , het is alleen toegankelijk vanuit dezelfde klasse en zijn afgeleide klassen.

Voorbeeld:beschermde leden in erfenis

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();
    }
  }
}

Uitvoer

I can eat

In het bovenstaande voorbeeld hebben we een klasse gemaakt met de naam Animal . De klasse bevat een beveiligde methode eat() .

We hebben de Hond . afgeleid klasse van het Dier klas. Let op de verklaring,

labrador.eat();

Sinds de protected methode toegankelijk is vanuit afgeleide klassen, hebben we toegang tot de eat() methode van de Hond klasse.


Soorten overerving

Er zijn de volgende soorten overerving:

1. Enkele erfenis

Bij enkele overerving erft een enkele afgeleide klasse van een enkele basisklasse.

2. Overerving op meerdere niveaus

Bij overerving op meerdere niveaus erft een afgeleide klasse van een basis en fungeert dezelfde afgeleide klasse als een basisklasse voor een andere klasse.

3. Hiërarchische overerving

Bij hiërarchische overerving erven meerdere afgeleide klassen van een enkele basisklasse.

4. Meerdere overerving

Bij meervoudige overerving erft een enkele afgeleide klasse van meerdere basisklassen. C# ondersteunt geen meervoudige overerving. We kunnen echter meerdere overerving bereiken via interfaces.

5. Hybride overerving

Hybride overerving is een combinatie van twee of meer soorten overerving. De combinatie van multilevel en hiërarchische overerving is een voorbeeld van hybride overerving.


Methode overschrijven in C#-overname

Als dezelfde methode aanwezig is in zowel de basisklasse als de afgeleide klasse, overschrijft de methode in de afgeleide klasse de methode in de basisklasse. Dit wordt methode-overriding genoemd in C#. Bijvoorbeeld,

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();
    }
  }
}

Uitvoer

I eat Dog food

In het bovenstaande voorbeeld is de eat() methode is aanwezig in zowel de basisklasse als de afgeleide klasse.

Wanneer we eat() . aanroepen met behulp van de Hond object labrador ,

labrador.eat();

de methode binnen Hond wordt genoemd. Dit komt omdat de methode binnen Hond overschrijft dezelfde methode binnen Animal .

Let op, we hebben virtual . gebruikt en overschrijven met methoden van respectievelijk de basisklasse en afgeleide klasse. Hier,

  • virtual - staat toe dat de methode wordt overschreven door de afgeleide klasse
  • override - geeft aan dat de methode de methode van de basisklasse overschrijft

basiszoekwoord in C#-overerving

In het vorige voorbeeld zagen we dat de methode in de afgeleide klasse de methode in de basisklasse overschrijft.

Maar wat als we de methode van de basisklasse ook willen aanroepen?

In dat geval gebruiken we de base sleutelwoord om de methode van de basisklasse uit de afgeleide klasse aan te roepen.

Voorbeeld:basiszoekwoord in C#-overerving

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();
    }
  }
}

Uitvoer

Animals eat food.
Dogs eat Dog food.

In het bovenstaande voorbeeld is de eat() methode is aanwezig in zowel de basisklasse Animal en de afgeleide klasse Hond . Let op de verklaring,

base.eat();

Hier hebben we de base . gebruikt trefwoord om toegang te krijgen tot de methode van Animal klas van de Hond klasse.


Belang van overerving in C#

Laten we een situatie bekijken om het belang van overerving te begrijpen.

Stel dat we werken met regelmatige veelhoeken zoals vierkanten, rechthoeken, enzovoort. En we moeten de omtrek van deze polygonen vinden op basis van de invoer.

1. Aangezien de formule om de omtrek te berekenen voor alle regelmatige veelhoeken hetzelfde is, kunnen we een RegularPolygon maken class en een methode calculatePerimeter() om de omtrek te berekenen.

class RegularPolygon {

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

2. En erven Vierkant en Rechthoek klassen uit de RegularPolygon klas. Elk van deze klassen heeft eigenschappen om de lengte en het aantal zijden op te slaan, omdat ze voor alle polygonen verschillend zijn.

class Square : RegularPolygon {

  int  length = 0;
  int sides = 0;
}

We geven de waarde door van de lengte en zijkanten om omtrek() te berekenen om de omtrek te berekenen.

Dit is hoe overerving onze code herbruikbaar en intuïtiever maakt.

Voorbeeld:belang van overerving

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);
      
    }
  }
}     

Uitvoer

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

In het bovenstaande voorbeeld hebben we een RegularPolygon . gemaakt klasse die een methode heeft om de omtrek van de regelmatige veelhoek te berekenen.

Hier, het Vierkant en Rechthoek erven van RegularPolygon .

De formule om de omtrek te berekenen is voor iedereen hetzelfde, daarom hebben we de calculatePerimeter() opnieuw gebruikt methode van de basisklasse.

En aangezien de formule om de oppervlakte te berekenen voor verschillende vormen anders is, hebben we een aparte methode gecreëerd binnen de afgeleide klasse om de oppervlakte te berekenen.


C Taal

  1. C# klasse en object
  2. C# Toegangsmodificaties
  3. C# statisch trefwoord
  4. C# abstracte klasse en methode
  5. C# geneste klasse
  6. C# Gedeeltelijke klasse en gedeeltelijke methode
  7. C# verzegelde klasse en methode
  8. Polymorfisme in C++
  9. Gegevensabstractie in C++
  10. C# - Programmastructuur
  11. C# - Basissyntaxis