class A
{
public virtual void WhoAreYou() { Console.WriteLine("I am an A"); }
}
class B : A
{
public override void WhoAreYou() { Console.WriteLine("I am a B"); }
}
class C : B
{
public new virtual void WhoAreYou() { Console.WriteLine("I am a C"); }
}
class D : C
{
public override void WhoAreYou() { Console.WriteLine("I am a D"); }
}
C c = new D();
c.WhoAreYou();// "I am a D"
A a = new D();
a.WhoAreYou();// "I am a B" !!!!
Referans dahili olarak nasıl dağıtılır, A referansı B? Herhangi biri neler olduğunu açıklayabilir mi?Dinamik Bağlanma C#
Um de kırar ama bu ne oluyor olduğunu düşünüyorum. D sınıfının bir nesnesini bildirdiğinizde ve onu C --- sınıfı C sınıfına atadığınızda, sanal bir işlevi vardır ve bu durumda yalnızca D'nin üzerine yazma işlevini kullanır. Ancak, D sınıfı bir nesneyi beyan ettiğinizde ve onu bir A sınıfına atadığınızda, D, B ve B'den C ve C'den miras aldığından ve sonunda A'dan miras aldığından, aynı zamanda A'nın üzerine yazdığında, o zaman bu baskı ifadesine sahip olursunuz. –
peki: msdn’yi okumak ve sanal/geçersiz kılma/yeni makineyi anlamaya çalışmak? senin örnek tamamen açık! –
@Flo: İlk durumda C nesnesi D'nin D referansını çağırır. Fakat İkinci durumda, A yöntemi, D'nin referansına sahipken, yöntem B yöntemini nasıl çağırdığını (içte ne olduğunu) çağırıyordu. Sessizce Kafa karıştırıcı .. –