Virtual(Sanal) Metodlar

Bugünkü makkalemizde sanal metodların kalıtım içerisindeki rolüne bakacağız. Sanal metodlar, temel sınıflarda tanımlanan ve türeyen sınıflarda geçersiz kılınabilen metodlardır. Bu tanım bize pek bir şey ifade etmez aslında. O halde gelin sanal metodların neden kullanırız, once buna bakalım. Bu amaçla minik bir örnek ile işe başlıyoruz.

using System;

using System.Collections.Generic;

using System.Text;

namespace VirtualSample

{

class Base

{

public virtual void who()

{

Console.WriteLine(“Who() in Base”);

}

}

/// <summary>

/// Autor Orhan Türk

/// Article Virtual Metod Using

/// </summary>

class Derived1

: Base

{

new public void who()

{

Console.WriteLine(“Who() in derived1”);

}

}

 

class Derived2 : Derived1

{

//public override void who()

//{

//    Console.WriteLine(“Who() in derived2”);

//}

}

/// <summary>

/// Kodumuz Temel isimli bir base class ve Tureyen isimli bir Derived Classvardır. Her iki sınıf içinde Yazdir isimli iki metod tanımlanmıştır. Main metodu içinde Temel sınıftan türettiğimiz bir nesneye ( baseOb

/// </summary>  nesnesi) Tureyen sınıf tipinden bir nesneyi (drv nesnesi) aktarıyoruz. Ardından baseOb nesnemizin Who  isimli metodunu çağırıyoruz.Sizce derleyici hangi sınıfın yazdır metodunu çağıracaktır. Drv nesnemiz Tureyen sınıf nesnesi olduğundan ve Temel sınıftan kalıtımsal olarak türetildiğinden baseOb isimli nesnemize aktarılabilmiştir. Şu durumda baseOb isimli Temel sınıf nesnemiz drv isimli Tureyen sınıf nesnemizi taşımaktadır. Bu tip bir atamam böyle base-derived ilişkide sınıflar için geçerli bir atamadır. Sorun baseOb isimli nesne için Yazdir metodunun çağırılmasındadır. Biz burada Tureyen sınıf nesnesini aktardığımız için bu sınıfa ait Who  metodunun çalıştırılmasını bekleriz. Oysaki sonuç aşağıdaki gibi olucaktır.

/// Saygılarımla Orhan Türk Bu Anlatımda Sizlere Virtual Method Ne Amaçla Kullanırız Onu Sunmuş Oldum  Makkalemde Gecen Bazı Örnekler Alıntı

class Program

{

static void Main(string[] args)

{

Base baseOb = new Base();

Derived1 dOb1 = new Derived1();

Base baseRef = baseOb;

baseRef.who();

baseRef = dOb1;

baseRef.who();

dOb1.who();

//Derived2 dOb2 = new Derived2();

//baseRef = dOb2;

//baseRef.who();

Console.ReadLine();

}

}

}

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

4 × two =

This site uses Akismet to reduce spam. Learn how your comment data is processed.