Virtual metotlar da kod gövdesi olması zorunludur. Her sınıfta tanımlanabilir. "virtual" metotların override edilmesi zorunlu değildir. Kalıtım yoluyla elde edilen sınıf ile, mevcut sınıfta bulunan metodun isminin aynı olması gerekir. Metotlara uygulanan ve diğer class'larda overright edilen anahtar sözcüktür. Miras alınan sınıfta metodun gövdesini değiştirir.
Bir çok class'ta ortak kullanmamız gereken metotlar "virtual" olarak tanımlanır ve sanal metotları oluştururlar. Bir metodun sanal metot olabilmesi için "virtual" anahtar kelimesini kullanması gerekir. Sanal metotlar, Türetilmiş sınıf tarafından kullanılamaz hale gelir ve türetilmiş olan sınıfın metodunu kullanılır.
Daha önceden oluşturmuş olduğumuz metodun, içeriğinin ileride değişmesini sağlama ihtiyacı olduğunda kullanılır. Böylelikle kalıtımı alınan bir sınıftaki metot, mevcut sınıftaki virtual metoda override edilir.
AClass'ın BClass'a base olarak eklendiğinde, AClass'ındaki Method(), BClass'taki Method()'a override olur. AClass'ının içerisinde bulunan Write() methodunu çalıştımak istediğimizde BClass içerisinde bulunan Method()'un çalıştığını gözlemleriz. Böylelikle BClass ta bulunan MetHod(), AClass ta bulunan metot yerine çalışır.
A Method B MethodDene