gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:09:06 24 4
gpt4 key购买 nike

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

有点像,

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'.

我该怎么做?

最佳答案

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

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

我猜你真正想要的是某种形式的注入(inject);例如:

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)
{

}

}

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

关于c# - C#中如何访问第一个基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53376371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com