C#: Yeni karşısında geçersiz kılar
Fark, aşağıdaki arasında ne olduğunu merak:
Durum 1 : Temel Sınıf
public void DoIt();
Durum 1 : Sınıf Miras
public new void DoIt();
Durum 2 : Temel Sınıf
public virtual void DoIt();
Durum 2 : sınıf Miras
public override void DoIt();
Her iki durum 1 ve 2 koştu testlere göre aynı etkiye sahip gibi görünüyor. Bir fark, orada tercih edilen bir yolu var mı?
Teşekkürler
Şiraz
CEVAP
Override değiştirici kullanılmış olabilir ve bulunması şarttır sanal yöntemleri soyut yöntemler. Bunun için gösterir son kullanma derleyici tanımlı bir yöntem uygulanması. Bile bu yöntem bir referans denir kullanır, temel sınıf uygulama geçersiz kılma.
public class Base
{
public virtual void DoIt()
{
}
}
public class Derived : Base
{
public override void DoIt()
{
}
}
Base b = new Derived();
b.DoIt();
Türetilmiş arayacak.Eğer bu Temel geçersiz kılar Doİt.Doİt.
Yeni değiştirici bildirir çocuğunuz kullanmak için derleyici sınıf uygulaması üst sınıf yerine uygulama. Herhangi bir kod bu değil sınıf başvuran ancak üst sınıf üst sınıfı kullanacak uygulama.
public class Base
{
public virtual void DoIt()
{
}
}
public class Derived : Base
{
public new void DoIt()
{
}
}
Base b = new Derived();
Derived d = new Derived();
b.DoIt();
d.DoIt();
İlk Ara Taban.Bana bak, sonra Türetilmiş.Doİt. Etkili aynı adı, türetilmiş bir yöntem Bankası yöntem geçersiz kılma yerine var olan tamamen ayrı iki yöntem ediyorlar.
Kaynak: Microsoft blog
'Gölge' vs 'Geçersiz kı...
Neden yeni bir anahtar gerekiyor ve ne...
Python: Nasıl "mükemmel" bir...
Nasıl String sınıfı operatör geçersiz ...
Geçersiz Kılar, Ama Set Değil...