c# Dziedziczenie

0

Witam.

Modyfikator pola - new:

"Umożliwia metodom klas potomnych "ukrywanie" tak samo nazwanych niewirtualnych metod klasy bazowej.
Oznacza to, że metody klas potomnych nie przykrywają swoich odpowiedników zdefiniowanych
w klasie bazowej, tylko je zastępują." - cytat z Core C# i .Net, str114

Jaka jest różnica między przykrywaniem a zastępowaniem?

1

Z tego co pamiętam, było to tam dokładnie wytłumaczone (tak, mam tą książkę)... Nie znalazłeś tego nigdzie czy po prostu od razu piszesz na forum :|

Tak czy inaczej, różnica pojawia się przy rzutowaniu klasy na jej klasę bazową:

    class Program
    {
        static void Main(string[] args)
        {
            Base bse = new Base();
            DerivA a = new DerivA();
            DerivB b = new DerivB();

            bse.Do();
            a.Do();
            b.Do();

            Console.WriteLine();

            ((Base)a).Do();
            ((Base)b).Do();

            Console.Read();
        }
    }

    class Base
    {
        public virtual void Do()
        {
            Console.WriteLine("BaseA");
        }
    }

    class DerivA : Base
    {
        public override void Do() // override
        {
            Console.WriteLine("DerivA");
        }
    }

    class DerivB : Base
    {
        public new void Do() // new
        {
            Console.WriteLine("DerivB");
        }
    }

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