pomoc z dziedziczeniem

0
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace KonfjuzingOne
{
    class Program
    {
        static void Main(string[] args)
        {
            A aB = new B();
            A aC = new C();
            B bC = new C();

            Console.WriteLine("aB.Write");
            aB.Write1(); aB.Write2(); aB.Write3(); aB.Write4();
            // > A 
            // > B 
            // > B 
            // > B

            Console.WriteLine("aC.Write");
            aC.Write1(); aC.Write2(); aC.Write3(); aC.Write4();
            // > A
            // > Namespace.C
            // > B
            // > B

            Console.WriteLine("bC.Write");
            bC.Write1(); bC.Write2(); bC.Write3(); bC.Write4();
            // B
            // Namespace.C
            // B
            // B

            Console.ReadKey();
        }

        abstract class A
        {
            public void Write1() { Console.WriteLine("A"); }
            public virtual void Write2() { Console.WriteLine("A"); }
            public abstract void Write3();
            public virtual void Write4() { Console.WriteLine("A"); }
        }

        class B : A
        {
            public void Write1() { Console.WriteLine("B"); }
            public virtual void Write2() { Console.WriteLine("B"); }
            public override void Write3() { Console.WriteLine("B"); }
            public override void Write4() { Console.WriteLine("B"); }
        }

        class C : B
        {
            public void Write1() { Console.WriteLine("C"); }
            public override void Write2() { Console.WriteLine(new C()); }
        }
    }
}

Generuje :

aB.Write
A
A
B
B
aC.Write
A
A <-- Czemu nie namespace.C??
B
B
bC.Write
B
KonfjuzingOne.Program+C
B
B

Co pokrywa mi się z założeniami poza wypadkiem aC - Write2()
Które według moich założeń powinno wypluć <Namepsace>.C

będę wdzięczny za podpowiedzi

0

Zaczyna się od A. jest Virtualna. Więc sprawdzamy wyżej czy nie jest przesłonięta. Dalej w B jest virtualna to przerywa się łańcuch dziedziczenia i wykonuje to co w A.

0

No w sumie to by miało sens, zawsze na czymś głupim się rozłożę, dzieki

1 użytkowników online, w tym zalogowanych: 0, gości: 1