C#:ssa perinnön avulla voimme luoda uuden luokan olemassa olevasta luokasta. Se on olio-ohjelmoinnin (OOP) keskeinen ominaisuus.
Luokka, josta uusi luokka luodaan, tunnetaan nimellä perusluokka (emoluokka tai yläluokka). Ja uutta luokkaa kutsutaan johdetuksi luokaksi (lapsi tai alaluokka)
Johdettu luokka perii perusluokan kentät ja menetelmät. Tämä helpottaa koodin uudelleenkäytettävyyttä C#:ssa.
Kuinka suorittaa perintö C#:ssa?
C#:ssa käytämme:
symboli perinnön suorittamiseen. Esimerkiksi,
luokka Animal { // kentät ja menetelmät} // Koira perii Animalclass Koira : Eläin { // Eläimen kentät ja menetelmät // Koiran kentät ja menetelmät }
Tässä perimme johdetun luokanKoiraperusluokastaEläin. TheKoiraluokka voi nyt käyttää kenttiä ja menetelmiäEläinluokkaa.
Esimerkki: C#-perintö
käyttäen System;nimiavaruus Periytys { // perusluokka luokka Animal { julkinen merkkijonon nimi; public void display() { Console.WriteLine("Olen eläin"); } }// johdettu luokka Animal Class Koira : Animal {
public void getName() { Console.WriteLine("Nimeni on " + nimi); } } luokka Ohjelma { static void Main(merkkijono[] args) { // johdetun luokan objekti Koira labrador = uusi Koira();// perusluokan pääsykenttä ja menetelmä labrador.name = "Rohu"; labrador.display();
// pääsymenetelmä omasta luokasta labrador.getName(); Console.ReadLine(); } }}
Lähtö
Olen eläin Nimeni on Rohu
Yllä olevassa esimerkissä olemme johtaneet alaluokanKoirasuperluokastaEläin. Huomaa lausunnot,
labrador.name = "Kulma"; labrador.getName();
Täällä käytämmelabradorinnoutaja(Koiran esine) päästäksesinimijanäyttö()-ltaEläinluokkaa. Tämä on mahdollista, koska johdettu luokka perii kaikki perusluokan kentät ja menetelmät.
Lisäksi olemme käyttäneetnimikentän menetelmän sisälläKoiraluokkaa.
on-suhde
C#:ssa perinnöllisyys on is-suhde. Käytämme periytymistä vain, jos kahden luokan välillä on is-suhde. Esimerkiksi,
- KoiraonEläin
- OmenaonHedelmä
- AutoonAjoneuvo
Voimme johtaaKoiraalkaenEläinluokkaa. Samalla lailla,OmenaalkaenHedelmäluokka jaAutoalkaenAjoneuvoluokkaa.
suojatut jäsenet C#-perinnössä
Kun julistamme kentän tai menetelmän nimelläsuojattu
, sitä voidaan käyttää vain samasta luokasta ja sen johdetuista luokista.
Esimerkki: suojatut jäsenet perinnössä
käyttäen järjestelmää;nimiavaruus Periytys { // perusluokka class Animal {suojattu void eat() { Console.WriteLine("Voin syödä"); }
} // johdettu Animal-luokan luokka Koira : Eläin { staattinen void Main(string[] args) { Koira labrador = uusi Koira();// pääsy suojattuun menetelmään perusluokasta labrador.eat();
Console.ReadLine(); } }}
Lähtö
voin syödä
Yllä olevassa esimerkissä olemme luoneet luokan nimeltäEläin. Luokka sisältää suojatun menetelmänsyödä().
Olemme johtaneetKoiraluokasta alkaenEläinluokkaa. Huomaa lausunto,
labrador.eat();
Koskasuojattu
-menetelmää voidaan käyttää johdetuista luokista, voimme käyttääsyödä()menetelmästäKoiraluokkaa.
Perinnön tyypit
On olemassa seuraavia perintötyyppejä:
1. Yksittäinen perintö
Yksittäisessä perinnössä yksi johdettu luokka perii yhdestä perusluokasta.

2. Monitasoinen perintö
Monitasoisessa perinnössä johdettu luokka perii kannasta ja sitten sama johdettu luokka toimii toisen luokan perusluokkana.

3. Hierarkkinen perintö
Hierarkkisessa perinnössä useat johdetut luokat perivät yhdestä perusluokasta.

4. Moniperintö
Moniperinnössä yksi johdettu luokka perii useista perusluokista.C# ei tue moniperintöä.Voimme kuitenkin saavuttaa useita perintöjä rajapintojen kautta.

5. Hybridiperintö
Hybridiperintö on kahden tai useamman perinnön tyypin yhdistelmä. Monitasoisen ja hierarkkisen periytymisen yhdistelmä on esimerkki hybridiperinnöstä.

Menetelmän ohittaminen C#-perinnössä
Jos sama menetelmä on sekä perusluokassa että johdetussa luokassa, johdetun luokan menetelmä ohittaa perusluokan menetelmän. Tätä kutsutaan menetelmän ohitukseksi C#:ssa. Esimerkiksi,
käyttäen järjestelmää;nimiavaruus Periytys { // perusluokka class Animal {public virtual void eat() { Console.WriteLine("Syön ruokaa"); }
} // johdettu Animal-luokan luokka Koira : Eläin { // Eläimen ohitusmenetelmäpublic override void eat() { Console.WriteLine("Syön koiranruokaa"); }
} luokka Ohjelma { staattinen void Main(merkkijono[] args) { // johdetun luokan objekti Koira labrador = uusi Koira(); // käyttää ohitettua menetelmää labrador.eat(); } }}
Lähtö
syön koiranruokaa
Yllä olevassa esimerkissäsyödä()menetelmä on läsnä sekä perusluokassa että johdetussa luokassa.
Kun soitammesyödä()käyttämälläKoiraesinelabradorinnoutaja,
labrador.eat();
menetelmä sisälläKoirakutsutaan. Tämä johtuu menetelmästä sisälläKoiraohittaa saman menetelmän sisälläEläin.
Huomaa, olemme käyttäneetvirtuaalinen
jaohittaaperusluokan ja johdetun luokan menetelmillä. Tässä,
virtuaalinen
- mahdollistaa menetelmän ohituksen johdetun luokan toimestaohittaa
- osoittaa, että menetelmä ohittaa perusluokan menetelmän
perusavainsana C#-perinnössä
Edellisessä esimerkissä näimme, että johdetun luokan menetelmä ohittaa perusluokan menetelmän.
Mutta entä jos haluamme kutsua myös perusluokan metodia?
Siinä tapauksessa käytämmepohja
avainsana kutsumaan johdetun luokan perusluokan metodia.
Esimerkki: perusavainsana C#-perinnössä
käyttäen System;nimiavaruus Periytys { // perusluokka class Animal { public virtual void eat() { Console.WriteLine("Eläimet syövät ruokaa."); } } // johdettu Animal-luokan luokka Koira : Eläin { // Eläimen ohitusmenetelmä julkinen ohitus void eat() {// kutsua menetelmää Animal-luokasta base.eat();
Console.WriteLine("Koirat syövät koiranruokaa."); } } luokka Ohjelma { static void Main(merkkijono[] args) { Koira labrador = uusi Koira(); labrador.eat(); } }}
Lähtö
Eläimet syövät ruokaa.Koirat syövät koiranruokaa.
Yllä olevassa esimerkissäsyödä()menetelmä on läsnä molemmissa perusluokissaEläinja johdettu luokkaKoira. Huomaa lausunto,
base.eat();
Täällä olemme käyttäneetpohja
avainsana, jolla pääset menetelmäänEläinluokasta alkaenKoiraluokkaa.
Perinnön merkitys C#:ssa
Ymmärtääksemme perinnön tärkeyden, tarkastellaan tilannetta.
Oletetaan, että työskentelemme säännöllisten monikulmioiden, kuten neliöiden, suorakulmioiden ja niin edelleen, kanssa. Ja meidän on löydettävä näiden polygonien ympärysmitta syötteen perusteella.
1.Koska ympäryksen laskentakaava on yhteinen kaikille säännöllisille polygoneille, voimme luoda aSäännöllinen polygoniluokka ja menetelmälaskePerimeter()kehän laskemiseen.
class Säännöllinen polygoni { laskePerimeter() { // ympärysmitan laskeva koodi }}
2.Ja periiNeliöjaSuorakulmioluokat alkaenSäännöllinen polygoniluokkaa. Jokaisella näistä luokista on ominaisuuksia sivujen pituuden ja lukumäärän tallentamiseen, koska ne ovat erilaisia kaikille polygoneille.
class Neliö : SäännöllinenPolygon { int pituus = 0; int sivut = 0;}
Välitämme arvonpituusjasivuttolaske ympärysmitta()kehän laskemiseen.
Näin perintö tekee koodistamme uudelleen käytettävän ja intuitiivisemman.
Esimerkki: Perinnön tärkeys
käyttäen järjestelmää;nimiavaruuden periytyminen { class RegularPolygon {public void laske Kehä(int pituus, int sivut) { int tulos = pituus * sivut; Console.WriteLine("Kehä: " + tulos); }
} luokka Neliö : Säännöllinen polygoni { public int pituus = 200; julkiset int-puolet = 4; public void laskeaArea() { int pinta-ala = pituus * pituus; Console.WriteLine("Neliön pinta-ala: " + alue); } } luokka Suorakulmio : SäännöllinenPolygon { public int pituus = 100; julkinen int leveys = 200; julkiset int-puolet = 4; public void laskeaArea() { int pinta-ala = pituus * leveys; Console.WriteLine("Suorakulmion alue: " + alue); } } class Ohjelma { staattinen void Main(merkkijono[] args) { Neliö s1 = new Neliö(); s1.calculateArea();s1.calculatePerimeter(s1.length, s1.sides);
Suorakulmio t1 = uusi Suorakulmio(); t1.laskeArea();t1.laskeKehä(t1.pituus, t1.sivut);
} }}
Lähtö
Neliön pinta-ala: 40 000 Kehä: 800 Suorakulmion pinta-ala: 20 000 Kehä: 400
Yllä olevassa esimerkissä olemme luoneet aSäännöllinen polygoniluokka, jolla on menetelmä säännöllisen monikulmion kehän laskemiseen.
Tässä,NeliöjaSuorakulmioperiiSäännöllinen polygoni.
Kehyksen laskentakaava on yhteinen kaikille, joten olemme käyttäneet uudelleenlaskePerimeter()perusluokan menetelmä.
Ja koska pinta-alan laskentakaava on erilainen eri muodoille, olemme luoneet johdettuun luokkaan erillisen menetelmän alueen laskemiseksi.