C # je rozdíl mezi abstraktem, virtuálním a zrušením

c #

Dnes vám chci ukázat rozdíl mezi abstraktním, virtuálním a C # přepsáním.

Shrnutí

Přidání abstraktu k úkolu nebo třídě znamená, že je nerealistické a očekává, že bude provedeno přijatou třídou. Vytvořme abstraktní třídu zvířat:

veřejná abstraktní třída {public empty shell () {Console.WriteLine ("Animal Bark"); }}

Zkusme vytvořit příklad třídy zvířat.

Zvířecí zvíře = nové zvíře ();

Udělejme to a kompilátor vám vrátí chybu, kterou nemůžete vytvořit abstraktní instanci třídy

Třídu závěru nelze vytvořit

Vytvořme třídu, která je zděděna zvířetem.

public class Dog: Animal {public bark () {Console.WriteLine ("Dog Bark"); }}

Nyní jsme schopni vytvořit instanci Animal pomocí objektu Dog. Samozřejmě také vytvoříme příklad psího typu.

Zvířecí zvíře = nový pes (); Pes pes = nový pes ();

Obvykle chcete použít první řádek, protože když vytvoříte více a více tříd, které dědí zvíře, jsou stále typem zvířete a lze je převést na práci s parametry typu zvířat nebo sbírkou. Tomu se říká polymorfismus.

Co se stane s funkční skořápkou? U transformujícího se zvířete, protože jeho typ je zvíře, se nazývá skořápková funkce definovaná ve třídě Animal. Pro měnícího se psa se kvůli jeho typu psa nazývá funkce kůry definovaná ve třídě Pes.

Pokud píšete abstrakt o funkcích, nemůžete provést funkci v této třídě a musíte ji provést v odvozené třídě. Změňme třídu zvířat a psů na:

public abstract class {public abstract bark () {Console.WriteLine ("Animal Bark"); }}
public class Dog: Animal {public bark () {Console.WriteLine ("Dog Bark"); }}

Během kompilace byly vráceny chyby kompilace.

Nelze provést abstraktní funkci

Postupujte podle pokynů kompilátoru. Odstraňte a nakrájejte cibuli slupkou ve třídě Animal. Cože? Chyba kompilace vrácena! ??

Zrušit

Ano. Přichází druhé klíčové slovo - zrušit. Chcete-li implementovat funkci správy kůry ve třídě Animal ve třídě psů, musíte zrušit funkci kůry, abyste kompilátoru řekli, že kůra provádí kůru ve třídě Animal (jako tomu bylo dříve). . Po úpravě byla kompilace úspěšná a nyní můžete vidět obě řádky - „Dog Coat“.

Virtuální

Pojďme mluvit o virtuální. Přidáním virtuální funkce poskytnete společnou logiku funkce, ale poskytnete flexibilitu k přepsání hlavní funkce. Můžete říci, že je velmi podobný, když k funkci nepřidáváte virtuální funkci. Vůbec ne. Teď vám ukážu rozdíl mezi virtuální a nevirtuální funkcí. Změňme třídy a základní funkce zvířat a psů:

program veřejné třídy {static void Main (string [] args) {Animal animal = new Dog (); Pes pes = nový pes (); animal.bark (); it.bark ();
animal.eat (); it.eat ();
Console.ReadLine (); }}
public class animal {public virtual empty shell () {Console.WriteLine ("Animal Bark"); }
veřejné jídlo () {Console.WriteLine ("Eating Animal"); }}
public class Dog: Animal {public void bark () {Console.WriteLine ("Dog bark"); }
veřejná večeře () {Console.WriteLine ("Jíst psa"); }}

Výsledkem je:

Pokud zrušíte virtuální funkci v základní třídě, funkce ve třídách základní a Derved jsou stejné. Díky virtuálnímu a nezrušení získáte dvě různé funkce - Animal.bark a Dog.bark.

Zkusme to znovu. Do hlavní funkce přidejte následující 2 řádky:

Zvířecí zvíře2 = nové zvíře (); animal2.bark ();

Nyní, když ji spustíte, získáte logiku definovanou ve třídě Animal. Shrneme tedy tato tři prohlášení a výsledky:

Zvířecí zvíře = nový pes (); animal.bark (); // Výstup: pesová kůra Pes pes = nový pes (); dog.bark (); // Exit: psí kůra Zvířecí zvíře2 = nové zvíře (); animal2.bark (); // Výstup: Živá kůra

Shrnutí:

Použijete-li třídu pro abstraktní téma, nemůžete vytvořit instanci této třídy. Můžete zdědit třídu dětí nebo vytvořit třídu dětí se základním typem třídy. Při použití funkce nemůžete použít funkci v hlavní třídě a musí být přepsána podřízenou třídou.

Pro virtuální můžete provést funkci v základní třídě. Jakmile ji podřízená třída zruší, bude k dispozici pouze 1 verze této funkce.

Zrušení lze použít pouze pro zrušení, virtuální nebo abstraktní.

Totéž platí i dnes. Doufám, že se vám líbí tento článek a přeji vám dobrý den

Původně zveřejněno na timmydinheing.com 18. dubna 2018.