Как вызвать метод из базового класса родительского класса - PullRequest
0 голосов
/ 13 февраля 2019

Могу ли я вызвать метод из класса прародителя, и если да, то как?

Я пытаюсь сделать что-то вроде этого:

class A {
    void foo() {
        // Do something...
    }
}

class B : A {
    override void foo() {
        // Do something else...
    }
}

class C : B {
    override void foo() {
        // Call A's foo method
        // Then do something else
    }
}

1 Ответ

0 голосов
/ 13 февраля 2019

Один из подходов заключается в использовании явной реализации интерфейса в class A:

Это позволяет вам вызывать реализацию A - как из кода внутри C, так и извне C (путем приведениядо IBob сначала).

using System;

namespace ConsoleApp4
{
    interface IBob
    {
        void foo();
    }

    class A : IBob
    {
        void IBob.foo()
        {
            Console.WriteLine("A");
        }

        public virtual void foo()
        {
            ((IBob)this).foo();
        }
    }

    class B : A
    {
        public override void foo()
        {
            Console.WriteLine("B");
        }
    }

    class C : B
    {
        public override void foo()
        {
            Console.WriteLine("C");

            // Writes B
            base.foo();

            // Writes A
            ((IBob)this).foo();
        }
    }
    public class Program
    {
        static void Main(string[] args)
        {
            var sally = new C();
            sally.foo(); // A B C

            IBob sally2 = sally;
            sally2.foo(); // A

            Console.ReadLine();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...