Vad är abstrakt klass i C #?
Abstrakt klass kan aldrig initieras och markeras av nyckelordet abstrakt. En abstrakt klass innehåller noll eller fler abstrakta metoder i den. Abstrakt klass fungerar som en basklass och är utformad för att ärvas av underklasser som antingen implementerar eller antingen åsidosätter dess metod.
Låt oss lära oss abstrakt klass i C # med exemplet nedan. Nedan är definitionen av en klass som heter 'Animal'. När klassen "Djur" definieras finns det inget känt om djuret, vare sig det är en hund eller en katt. Metoden som kallas beskrivning är bara en generisk metod som definierats för klassen.
Nu när det är känt vad exakt djuret kommer att bli skapar vi en annan klass som ärver basklassen. Om vi vet att djuret faktiskt är en hund skapar vi hundklass som ärver huvudbasklassen. Huvudskillnaden här är att hundklassen inte kan ändra definitionen av beskrivningsmetoden för djurklassen. Den måste definiera sin egen C # abstrakta metod som kallas Dog-Description. Detta är det grundläggande begreppet C # abstrakta klasser.
Låt oss se abstrakt klass i C # med exempel i realtid om hur vi kan ändra vår kod för att inkludera en C # abstrakt klass. Observera att vi inte kommer att köra koden, eftersom det inte finns något som kan köras med en C # abstraktionsklass.
Steg 1) Som ett första steg, låt oss skapa en abstrakt klass. Klassen kommer att kallas Tutorial och har bara en metod. All kod måste skrivas i Program.cs-filen.
Kodförklaring: -
- Vi definierar först den abstrakta klassen. Observera användningen av det abstrakta nyckelordet. Detta används för att beteckna att klassen är en abstrakt klass.
- Därefter definierar vi vår metod som inte gör något. Metoden måste ha nyckelordet som heter virtuellt. Detta innebär att metoden inte kan ändras av barnklassen. Detta är ett grundläggande krav för alla abstrakta klasser.
Steg 2) Låt oss nu lägga till vår barnklass. Den här koden läggs till i filen Program.cs.
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace DemoApplication{abstract class Tutorial{public virtual void Set(){}}class Guru99Tutorial:Tutorial{protected int TutorialID;protected string TutorialName;public void SetTutorial(int pID,string pName){TutorialID=pID;TutorialName=pName;}public String GetTutorial(){return TutorialName;}static void Main(string[] args){Guru99Tutorial pTutor=new Guru99Tutorial();pTutor.SetTutorial(1,".Net");Console.WriteLine(pTutor.GetTutorial());Console.ReadKey();}}}
Det finns inget exceptionellt med den här koden. Vi definierar bara en klass som heter 'Guru99Tutorial' som ärver den abstrakta Tutorial-klassen. Vi definierar sedan samma metoder som vi har använt från tidigare.
Obs! Här kan vi inte ändra definitionen av Set-metoden som definierades i klassen Tutorial. I klassen Tutorial hade vi definierat en metod som heter 'Set' (public virtual void Set ()). Eftersom metoden var en del av den abstrakta klassen C # får vi inte definiera Set-metoden igen i Guru99Tutorial-klassen.