我在我的应用中定义了一个基类
类似
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'
。
我该怎么做?
答案 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)
{
}
}
在这种情况下,您可能会发现不再需要继承。