首页 > 解决方案 > 如何从它的 BaseClass 函数中调用所有同名的 DerivedClass 对象函数?

问题描述

我需要调用所有以前的函数,而不是被 DerivedClass 函数覆盖。

public class Program
{
    class BaseClass
    {
        public int BaseClassData = 123;
        public virtual void ResetAllData()
        {
            BaseClassData = 0;
        }

    }

    class DerivedClass : BaseClass
    {
        public int ChildClassData = 456;
        public override void ResetAllData()
        {
            ChildClassData = 0;

        }
    }



    public static void Main()
    {
        DerivedClass subject = new DerivedClass();
        DerivedClass subject2 = new DerivedClass();

        (subject).ResetAllData();
        Console.WriteLine(subject.BaseClassData+", "+subject.ChildClassData); // this needs to return 0, 0

        (subject2 as BaseClass).ResetAllData();
        Console.WriteLine(subject2.BaseClassData+", "+subject2.ChildClassData); // and this needs to return 0, 0

    }
}

使用 virtual 和 override 似乎是正确的方向,因为调用该函数将返回相同的结果,无论转换为它在 subject2 中的基类(这是我需要的另一件事),但两者都不会调用其自身的先前版本。

有没有一种有效的方法可以做到这一点,而无需将 BaseClass 函数中的所有内容复制到覆盖函数中?

标签: c#

解决方案


您可以使用关键字访问基类的成员base。因此,在您孩子的重写方法中,只需调用base.ResetAllData().


推荐阅读