Sanal Metotlar (Virtual Methods) / Virtual / Override

Basitçe ifade etmek gerekirse: Bir temel sınıfta (base class) tanımlanan bir metodun, o sınıftan türeyen alt sınıflarda (derived class) ihtiyaca göre ezilmesine (override) ve farklı bir işlev kazanmasına olanak tanır.
Örnek
 
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            Jip Jp = new Jip();
            MessageBox.Show(Jp.AracinTuru() + " teker sayısı " + Jp.TekerSayisi());

            Kamyon Ka = new Kamyon();
            MessageBox.Show(Ka.AracinTuru() + " teker sayısı " + Ka.TekerSayisi());

        }
    }

    class Otomobil
    {
        public virtual string AracinTuru()
        {
            return "Otomobil";
        }

        public virtual int TekerSayisi()
        {
            return 0;
        }
    }

    class Kamyon : Otomobil
    {
        public override string AracinTuru()
        {
            return "Kamyon";
        }

        public override int TekerSayisi()
        {
            return 6;
        }
    }

    class Jip : Otomobil
    {
        public override string AracinTuru()
        {
            return "4x4 Jip";
        }

        public override int TekerSayisi()
        {
            return 4;
        }
    }
}
 
 

Örnek
 
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            /*Kediler Canli = new Kediler();
            Canli.SesCikar();*/

            Jaguar Ja = new Jaguar();
            Ja.SesCikar();
        }
        
        class Hayvan
        {
            public virtual void  SesCikar()
            {
                MessageBox.Show("Genel hayvan sesi...");
            }
        }

        class Kediler : Hayvan { 
        
            public override void SesCikar()
            {
                MessageBox.Show("Miyav...");
            }
        
        }

        class Jaguar : Kediler //extend
        {
            public override void SesCikar()
            {
                MessageBox.Show("Voaaavvv...");
            }
        }
    }
}
 
Örnek
 
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Matematik Mt = new Matematik();
            //Mt.UcgeninTuru(50, 50);
            MessageBox.Show(Mt.TurBul());

            /*UcgeninTuru Ut = new UcgeninTuru();
            MessageBox.Show(Ut.TurBul()); //Eş kenar Üçgen*/
        }
    }

    public class  UcgeninTuru
    {
        protected int Ak, Bk, Ck;

        public UcgeninTuru() //construction  + overloading
        {
            this.Ak = 60;
            this.Bk = 60;
            this.Ck =60;
        }

        public UcgeninTuru(int A, int B) //construction + overloading
        {
            this.Ak = A;
            this.Bk = B;
            this.Ck = 180 - A - B;
        }

        public UcgeninTuru(int A, int B, int C)  //construction  + overloading
        {
            this.Ak = A;
            this.Bk = B;
            this.Ck = C;
        }

        public virtual string TurBul ()
        {
            if (this.Ak == this.Bk && this.Ak== this.Ck && this.Bk == this.Ck)
            {
                return "Eş Kenar üçgen";
            }
            else if (this.Ak == this.Bk || this.Ak==this.Ck || this.Bk == this.Ck)
            {
                return "İkiz Kenar üçgen";
            }
            else
            {
                return "Türü bulunamadı";
            }
        }
    }

    public class Matematik : UcgeninTuru {

        public override string TurBul() //yukaridaki TurBulun çalışmasına izin vermedi, onu ezdi.
        {
   
            if (this.Ak == 90 || this.Bk == 90 || this.Ck == 90)
            {
                return "Dik üçgen";
            }
            else
            {
                return "Türü tespit edilemedi";
            }
        }
    }
}
 
Örnek
 
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Samira sm = new Samira();
            MessageBox.Show(sm.Koridoru() + " Koridorunda oynar ve görevi" + " " + sm.KoridorGorevi());
            Ornn ornn = new Ornn();
            MessageBox.Show(ornn.Koridoru() + " Koridorunda oynar ve görevi" + " " + ornn.KoridorGorevi());
            Ryze ry = new Ryze();
            MessageBox.Show(ry.Koridoru() + " Koridorunda oynar ve görevi" + " " + ry.KoridorGorevi());
            Nautilus naut = new Nautilus();
            MessageBox.Show(naut.Koridoru() + " Koridorunda oynar ve görevi" + " " + naut.KoridorGorevi());
            Kayn kayn = new Kayn();
            MessageBox.Show(kayn.Koridoru() + " Koridorunda oynar ve görevi" + " " + kayn.KoridorGorevi());

        }
    }
    class LoLKarakterleri
    {
        public virtual string Koridoru()
        {
            return "LoLKarakterleri";
        }
        public virtual string KoridorGorevi()
        {
            return "";
        }
    }
    class Samira : LoLKarakterleri
    {
        public override string Koridoru()
        {
            return "Bot yani alt koridor";
        }
        public override string KoridorGorevi()
        {
            return "1350 koridor xp'sı kazan ve kendisine fazladan eşya yeri aç";
        }
    }
    class Ornn : LoLKarakterleri
    {
        public override string Koridoru()
        {
            return "Top yani üst koridor";
        }
        public override string KoridorGorevi()
        {
            return "1350 koridor xp'sı kazan ve  oyunda fazladan 2 level arttır , fazladan xp artısı ve ısınlanma büyüsü güçlensin";
        }
    }
 
Örnek: Base Kullanımı
 
 
using System;

// Üst Sınıf
class Robot
{
    public string Model;

    public Robot(string model) // Parametre alan yapıcı metot
    {
        this.Model = model;
        Console.WriteLine($"{Model} modeli başlatıldı.");
    }
}

// Alt Sınıf
class SavasRobotu : Robot
{
    public int SilahGucu;

    // 'base(model)' diyerek üst sınıfın constructor'ına parametre gönderiyoruz
    public SavasRobotu(string model, int guc) : base(model)
    {
        this.SilahGucu = guc;
        Console.WriteLine($"Silah gücü {SilahGucu} olarak ayarlandı.");
    }
}

class Program
{
    static void Main()
    {
        SavasRobotu myBot = new SavasRobotu("RX-78", 100);
    }
}
 
Yükleniyor...
Yükleniyor...