C#-arv och polymorfism med programexempel

โšก Smart sammanfattning

Arv och polymorfism i C# รคr tvรฅ centrala objektorienterade principer. Arv lรฅter en underklass รฅteranvรคnda fรคlten och metoderna frรฅn en fรถrรคlderklass, medan polymorfism tillรฅter att ett metodnamn kan anta mรฅnga former.

  • ๐Ÿงฌ Arv: En underklass รคrver sina รถverordnade klassfรคlt och metoder och kan lรคgga till sina egna.
  • ๐Ÿ”’ Skyddade medlemmar: Genom att markera รถverordnade fรคlt som skyddade kan en hรคrledd underklass รฅteranvรคnda dem direkt.
  • ๐Ÿงฉ Polymorfism: Ett metodnamn kan ta mรฅnga former, sรฅ ett enskilt anrop beter sig olika beroende pรฅ kontext.
  • ๐Ÿ”€ Metodรถverbelastning: Flera metoder delar ett namn men skiljer sig รฅt i parametrar, som lรถses vid kompileringstillfรคllet.
  • ๐Ÿงฑ Code รฅteranvรคndning: Bรฅda principerna eliminerar dubbletter av kod och hรฅller relaterade klasser konsekventa.
  • ๐Ÿค– AI-hjรคlp: GitHub Copilot bygger upp bas- och hรคrledda klasser; ML.NET รฅteranvรคnder klasshierarkier som modellindata.

C# Arv och polymorfism

Vad รคr arv i C#?

Arv รคr ett viktigt begrepp i C#. Arv รคr ett begrepp dรคr man definierar fรถrรคldraklasser och barnklasser. De underordnade klasserna รคrver metoder och egenskaper frรฅn den รถverordnade klassen, men samtidigt kan de รคven modifiera metodernas beteende om det behรถvs. Barnklassen kan ocksรฅ definiera egna metoder om det behรถvs.

Lรฅt oss fรฅ en bรคttre fรถrstรฅelse av C#-arv genom ett programexempel:

C# Arvsexempel

Lรฅt oss nu se hur vi kan infรถrliva begreppet arv i vรฅr kod.

Steg 1) Det fรถrsta steget รคr att รคndra koden fรถr vรฅr handledningsklass. I det hรคr steget lรคgger vi till koden nedan i filen Tutorial.cs.

C# Arvsexempel

Observera att vi nu mรฅste lรคgga till รฅtkomstmodifieraren "skyddad" i bรฅde TutorialID och TutorialName-fรคltet.

Kom ihรฅg att vi nรคmnde denna รฅtkomstmodifierare i Handledning fรถr Access ModifierHรคr kan du se syftet med att ha detta. Endast nรคr du har denna รฅtkomstmodifierare (skyddad) kan underklassen anvรคnda fรคlten i รถverklassen.

Steg 2) Det andra steget รคr att lรคgga till vรฅr nya underklass. Klassens namn kommer att vara "Guru99Tutorialโ€. I det hรคr steget lรคgger vi till koden nedan i Tutorial.cs-filen. Koden ska placeras efter klassdefinitionen fรถr Tutorial.

C# Arvsexempel

Code Fรถrklaring:-

  1. Det fรถrsta steget รคr att skapa Guru99Tutorial underklass. Vi mรฅste ocksรฅ nรคmna att den hรคr klassen kommer att vara en underklass till Tutorial-klassen. Detta gรถrs med nyckelordet ':'.
  2. Dรคrefter definierar vi en metod som heter RenameTutorial. Det kommer att anvรคndas fรถr att byta namn pรฅ fรคltet TutorialName. Denna metod accepterar en strรคngvariabel som innehรฅller det nya namnet pรฅ handledningen.
  3. Vi tilldelade sedan parametern pNewName till fรคltet TutorialName. Anmรคrkningar: โ€“ ร„ven om vi inte har definierat fรคltet Handledningsnamn i โ€œGuru99Tutorialโ€-klassen, har vi fortfarande รฅtkomst till det hรคr fรคltet. Detta beror pรฅ att โ€œGuru99Tutorialโ€ รคr en underklass till Tutorial-klassen. Och eftersom vi har gjort fรคlten i Tutorial-klassen skyddade kan de nรฅs av den hรคr klassen.

Steg 3) Det sista steget รคr att modifiera vรฅr huvudsakliga Program.cs-fil. I vรฅr konsolapplikation ska vi skapa ett objekt av Guru99Tutorial-klassen. Med det hรคr objektet kommer vi att anropa metoden RenameTutorial. Vi kommer sedan att visa fรคltet TutorialName med hjรคlp av metoden GetTutorial.

C# Arvsexempel

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 public class Tutorial
 {
  protected int TutorialID; 
  protected string TutorialName;
  
  public void SetTutorial(int pID,string pName) 
  {
   TutorialID=pID;
   TutorialName=pName;
  }
  
  public String GetTutorial()
  {
   return TutorialName;
  }
 }
  public class Guru99Tutorial:Tutorial
  {
   public void RenameTutorial(String pNewName)
   {
    TutorialName=pNewName;
   }
  
  static void Main(string[] args) 
  {
   Guru99Tutorial pTutor=new Guru99Tutorial();
   
   pTutor.RenameTutorial(".Net by Guru99");
    
   Console.WriteLine(pTutor.GetTutorial());
    
   Console.ReadKey(); 
  }
 }
}

Code Fรถrklaring:-

  1. Det fรถrsta steget รคr att skapa ett objekt fรถr Guru99Tutorial-klassen. Detta gรถrs via nyckelordet 'new'. Observera att vi den hรคr gรฅngen inte skapar ett objekt av Tutorial-klassen.
  2. Vi anvรคnder metoden RenameTutorial fรถr Guru99Tutorial-klassen fรถr att รคndra fรคltet TutorialName. Vi skickar strรคngen โ€œ.Net by Guru99โ€ till RenameTutorial-metoden.
  3. Vi anropar sedan GetTutorial-metoden. Observera att รคven om den hรคr metoden inte รคr definierad i Guru99Tutorial-klassen, vi kan fortfarande komma รฅt den hรคr metoden. Utdata frรฅn GetTutorial-metoden visas sedan i konsolen via Console.WriteLine-metoden.

Om ovanstรฅende kod matas in korrekt och programmet kรถrs framgรฅngsrikt, kommer fรถljande utdata att visas.

Produktion:

C# Arvsexempel

Frรฅn utdata kan vi tydligt se att fรคltet TutorialName har bytt namn till โ€œ.Net by Guru99โ€. Detta mรถjliggjordes tack vare metoden RenameTutorial som anropades av barnklassen.

Vad รคr polymorfism i C#?

polymorfism in C# รคr ett OOP-koncept dรคr ett namn kan ha mรฅnga former. Till exempel har du en smartphone fรถr kommunikation. Kommunikationslรคget du vรคljer kan vara vad som helst. Det kan vara ett samtal, ett sms, ett bildmeddelande, e-post, etc. Sรฅ mรฅlet รคr gemensamt, det vill sรคga kommunikation, men deras tillvรคgagรฅngssรคtt รคr annorlunda. Detta kallas polymorfism.

Du kommer att fรฅ en bรคttre fรถrstรฅelse av C#-polymorfism genom fรถljande programexempel:

Exempel pรฅ C#-polymorfism

Lรฅt oss nu se hur vi kan infรถrliva begreppet polymorfism i vรฅr kod.

Steg 1) Det fรถrsta steget รคr att รคndra koden fรถr vรฅr handledningsklass. I det hรคr steget lรคgger vi till koden nedan i filen Tutorial.cs.

Exempel pรฅ C#-polymorfism

Code Fรถrklaring:-

1 & 2) Det fรถrsta steget รคr detsamma som i vรฅra tidigare exempel. Vi รคr noga med attping definitionen av SetTutorial-metoden som den รคr.

3) Denna metod stรคller in TutorialID och TutorialName baserat pรฅ parametrarna pID och pName.

4) Det รคr hรคr vi gรถr en fรถrรคndring i vรฅr klass dรคr vi lรคgger till en ny metod med samma namn som SetTutorial. Bara den hรคr gรฅngen skickar vi bara en parameter som รคr pName. I den hรคr metoden stรคller vi bara in fรคltet fรถr TutorialName till pName.

Steg 2) Det sista steget รคr att modifiera vรฅr huvudsakliga Program.cs-fil. I vรฅr konsolapplikation ska vi skapa ett objekt av Guru99 Handledningskurs.

Exempel pรฅ C#-polymorfism

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Tutorial
 {
  public int TutorialID; 
  public string TutorialName;
  
  public void SetTutorial(int pID,string pName) 
  {
   TutorialID=pID;
   TutorialName=pName;
  }
  public void SetTutorial(string pName) 
  {
   TutorialName=pName;
  }
  public String GetTutorial()
  {
   return TutorialName;
  }
  
  static void Main(string[] args) 
  {
   Tutorial pTutor=new Tutorial();
   
   pTutor.SetTutorial(1,"First Tutorial");
   Console.WriteLine(pTutor.GetTutorial());
   
   pTutor.SetTutorial("Second Tutorial");
   Console.WriteLine(pTutor.GetTutorial());
    
   Console.ReadKey(); 
  }
 }
}

Code Fรถrklaring:-

  1. I det fรถrsta steget anvรคnder vi SetTutorial-metoden med 2 parametrar. Dรคr vi skickar bรฅde TutorialID och TutorialName till denna metod.
  2. I det andra steget anropar vi nu SetTutorial-metoden med bara en parameter. Vi skickar bara TutorialName till denna metod.

Om ovanstรฅende kod anges korrekt och programmet kรถrs kommer fรถljande utdata att visas. Om du ocksรฅ vill hรคmta handlednings-ID tillsammans med handledningsnamnet, bรถr du fรถlja steget nedan

  1. Skapa en separat metod som heter public int GetTutorialID
  2. I den metoden skriver du kodraden "return TutorialID." Detta kan anvรคndas fรถr att returnera TutorialID till det anropande programmet.

Produktion:

Exempel pรฅ C#-polymorfism

Frรฅn resultatet kan vi tydligt se att bรฅda metoderna anropades framgรฅngsrikt. Pรฅ grund av detta skickades strรคngarna "First Tutorial" och "Second Tutorial" till konsolen.

Vanliga frรฅgor

C# stรถder arv pรฅ en nivรฅ, flera nivรฅer och hierarkiskt arv genom klasser. Flerfaldigt arv sker endast via grรคnssnitt.

Nej. AC#-klassen รคrver endast frรฅn en basklass. Multipel arv anvรคnder istรคllet flera grรคnssnitt.

ร–verbelastning anvรคnder ett namn med olika parametrar vid kompileringstid. ร…sidosรคttning omdefinierar en virtuell basmetod vid kรถrning.

Nyckelordet virtual gรถr en basmetod รฅsidosรคttbar; nyckelordet override omdefinierar den i en hรคrledd klass.

Nyckelordet base lรฅter en hรคrledd klass anropa den รถverordnade konstruktorn eller nรฅ dolda eller รฅsidosatta basmedlemmar.

Markera klassen som fรถrseglad. En fรถrseglad klass kan inte vara en basklass, vilket fรถrhindrar ytterligare arv och fรถrbรคttrar prestandan.

Ja. GitHub Copilot bygger upp bas- och underklasser och lรคgger till virtuella och override-metoder frรฅn en kommentar eller ett klassnamn.

ML.NET definierar data- och prediktionsklasser som รคrver delade medlemmar, och dess pipeline รฅteranvรคnder en gemensam transformatorbastyp.

Sammanfatta detta inlรคgg med: