如何在C#中继承层次结构中访问先前的父项

时间:2015-02-10 06:34:28

标签: c# inheritance

我只是想了解以下是否可行。

我有客户,specialCustomer和goldCustomer类。 Customer和GoldCustomer的特殊继承继承自SpecialCustomer。

如何从GoldCustomer访问Customer类的Add()实现?使用base.Add()只调用直接父级的Add()

public class Customer
{
    public virtual void add()
    {
        Console.WriteLine("Base Add");

    }
}

public class SpecialCustomer: Customer
{
    public override void add()
    {            
        Console.WriteLine("SPL CUST Add");
    }
}

public class GoldCustomer : SpecialCustomer
{

    public new void add()
    {
        base.add();// cals the immediate parent.
        //How to call the method on Customer base class(Parent's parent)
        Console.WriteLine(" chid GOLD CUST Add");
    }

}

2 个答案:

答案 0 :(得分:0)

我的第一个建议是如果可以避免这种情况(软件很复杂,为什么会让它变得更复杂?)。

如果您无法避免这种情况,第二个建议是this转换为所需的基本类型并调用所需的方法,例如((Customer)this).add()

但你能解释一下为什么你需要这样做吗?可能是您的设计需要进行一些重构。

答案 1 :(得分:0)

    public class Customer
    {
        public virtual void add()
        {
            C1();
        }


        public void C1()
        {
            Console.WriteLine("Base Add");
        }
    }

您的代码应如下所示,之后只需致电new GoldCustomer.C1();