C# Virtual ve Override Metodlar

Leader-TR

Üye
11 Ağu 2018
182
50
Sanane

Virtual Metodu

Temel(base) sınıfın içerisinde tanımlanan sanal metodlardır. Sanal metod sayesinde temel sınıftan miras aldığımız metodları iptal edebilir, türetilmiş sınıfta değiştirebiliriz. Bunu yapabilmek için temel sınıftaki değiştirmek istediğimiz metodu virtual olarak tanımlamalıyız.

Override Metodu

Temel sınıfta tanımlanmış sanal elemanı, türetilmiş sınıfta düzenlenip tekrar kullanılmasını sağlayan bir metoddur. Kullanılması için türetilmiş sınıftaki elemanın aynı isimle kullanılması ve override keyword ile tanımlanması gerekir. Bu yöntemi miras aldığımız sınıftaki bir elemanı iptal etmek ve değiştirmek istediğimizde kullanırız. Override metodunu kullandığımızda temel sınıftaki eleman devre dışı kalır, bu metodu tekrar aktif edebilmemiz için base keywordünü kullanmalıyız.

C#:
class Program
{
    static void Main(string[] args)
    {
        Türetilmis yaz = new Türetilmis();
        yaz.EkranaYaz();
        Console.ReadLine();
    }
}

public class Temel
{
    public virtual void EkranaYaz(string sıralama)
    {
        Console.WriteLine("{0}. Base sınıftaki sanal metod çalıştı", sıralama);
    }

    // bu metodu main metodundaki yaz.EkranaYaz(); kodunun hata vermemesi için yazdık.
    // bu metod ile aşırı yükleme yapmasaydık yaz.EkranaYaz();'de bir parametre vermek zorunda kalırdık.
    public virtual void EkranaYaz()
    {
        Console.WriteLine("Base sınıftaki sanal metod çalıştı");
    }

}

public class Türetilmis : Temel
{
    public override void EkranaYaz()
    {
        base.EkranaYaz("1");
        Console.WriteLine("Türetilen sınıfdaki override metodu çalıştı.");
        base.EkranaYaz("2");
    }
}
Kod:
1. Base sınıftaki sanal metod çalıştı
Türetilen sınıfdaki override metodu çalıştı.
2. Base sınıftaki sanal metod çalıştı
Yukarıda EkranaYaz metodunu override ederek iptal ettik. Türetilmis sınıfından bir nesne oluşturup Ekrana yaz metodunu çalıştırdığımızda sanal metod değil, override ettiğimiz metod çalıştı. Daha sonra ovverride metodunu içinde base.EkranaYaz("1"); ile sanal metodu tekrardan çalıştırdık.

Bir sınıfta override edilen bir eleman, override edilmiş bir şekilde oğul ve torunlarına miras verir.

C#:
class Program
{
    static void Main(string[] args)
    {
        Saat s = new Saat();
        s.RenkBilgiVer();
        s.OncekiRenk();
           
        Makas m = new Makas();
        m.RenkBilgiVer();
           
        Kalem k = new Kalem();
        k.RenkBilgiVer();
    }
}

class Esya
{
    public virtual string renk { get; set; } = "kırmızı";

    public void RenkBilgiVer()
    {
        Console.WriteLine($"Benim rengim {renk}");
    }

}

class Saat : Esya
{
    // renk property'sini override ederek tekrardan düzenledik.
    public override string renk { get; set; } = "Beyaz";

    // base keywordü ile temel sınıftaki renk propertysine ulaştık.
    public void OncekiRenk()
    {
        Console.WriteLine($"Menim önceki rengim {base.renk}");
    }
}

class Makas : Saat
{
    // renk property'sini override ederek tekrardan düzenledik.
    public override string renk { get; set; } = "Sarı";
       
}

class Kalem : Makas
{
       
}

Kod:
Benim rengim Beyaz
Menim önceki rengim kırmızı
Benim rengim Sarı
Benim rengim Sarı

Fark ettiğiniz gibi miras aldığı sınıftan bir eleman override edilmemiş ise türetilmiş sınıflara override edilmiş şekilde miras vermektedir.
Makas sınıfında renk properry'si override edilerek "sarı" olarak değiştirildi, daha sonra kalem sınıfı makas sınıfını miras aldı. Burada kalem sınıfı renk property'sini override halini yani "sarı" değerini miras almıştır.
aq3u4ls.png
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.