Virtual method , bir class’tan türetilmiş başka bir class’ın esas class içindeki methodu farklı bir şekilde kullanabilmesine imkan sağlayan methoddur.
Diyelim ki Database adı verilen bir class olsun. Bu class’ta temel ekleme ve silme işlemini yapan iki method olsun. Ekleme methodu çalıştırılınca “Added” yazısı ve Silme methodu çalışınca “Deleted” yazısı çıksın.
public class Database
{
public virtual void Add()
{
Console.WriteLine("Added.");
}
public virtual void Delete()
{
Console.WriteLine("Deleted.");
}
}
Şimdi bu class’tan iki class daha türetelim. Biri SqlServer diğeri MySql olsun.Bu iki class da ekleme ve silme methodlarını kullanacaklar ancak daha farklı bir çıktı üretecekler. Bu nedenle üstteki class methodlarına virtual anahtar kelimesi eklenmelidir. Türetilen sınıflarda da method değiştirilebilmesi için override anahtar kelimesi eklenmelidir.
public class SqlServer:Database
{
public override void Add()
{
Console.WriteLine("Added by Sql Server.");
base.Add();//eğer temel sınıfın metodunun aynen kullanmak istiyorsak bu şekilde çağırabiliriz.
}
}
public class MySql:Database
{
public override void Add()
{
Console.WriteLine("Added by MySql Server.");
base.Add();
}
}
Methodları çalıştırdığımızda aşağıdaki şekilde bir sonuç elde ederiz.
public class Program
{
static void Main(string[] args)
{
SqlServer sqlServer = new SqlServer();
sqlServer.Add();
MySql mySql = new MySql();
mySql.Add();
Console.ReadLine();
}
}
Output :
