如何访问C#中的第一个基类?

时间:2018-11-19 14:05:48

标签: c# .net

我在我的应用中定义了一个基类

类似

using System;

public class BaseClass
    {
       public virtual void Method2() {Console.WriteLine("base2");}
       public virtual void Method1() {Console.WriteLine("base1");}
    }
public class Derived1 : BaseClass
    {
       public override void Method2() {Console.WriteLine("derived1-2");}
       public override void Method1() {Console.WriteLine("derived1-1");}
    }
    public class Derived2 : Derived1
    {
       public override void Method1() {Console.WriteLine("derived2-2");}


    }
public class Program
{
    public static void Main()
    {
        var obj = new Derived2();
        ((BaseClass)obj).Method2();
        Console.WriteLine("Hello World");
    }
}

说我需要访问我的第一个BaseClass的Method2()。即使将其转换为((BaseClass)obj).Method2()之后,我仍然期望derived1-2的同时得到base2'

我该怎么做?

1 个答案:

答案 0 :(得分:1)

我完全同意以下意见:听起来您需要的行为将需要您重新考虑您的类-在这种情况下,继承可能不是最佳解决方案。这取决于您要做什么。您显然可以这样做:

var obj = new BaseClass();
((BaseClass)obj).Method2();
Console.WriteLine("Hello World");

我的猜测是您实际上想要的是某种形式的注射;例如:

public class BaseClass
{
    private readonly IFunctionality1 functionality1;

    public virtual void Method2() { Console.WriteLine("base2"); }
    public virtual void Method1() { this.functionality1.Method1(); }

    public BaseClass(IFunctionality1 functionality1)
    {
        this.functionality1 = functionality1;
    }
}
public class Derived1 : BaseClass
{
    public Derived1(IFunctionality1 functionality1) : base (functionality1)
    {

    }

}

在这种情况下,您可能会发现不再需要继承。