gpt4 book ai didi

C# 在不知道它是子类实例的情况下调用重写的子类方法

转载 作者:太空狗 更新时间:2023-10-30 00:29:24 24 4
gpt4 key购买 nike

我有一个带有虚方法的基类,以及多个覆盖该方法的子类。

当我遇到其中一个子类时,我想调用重写的方法,但不知道子类。我可以想到丑陋的方法来做到这一点(检查一个值并转换它),但似乎应该有一种语言内的方法来做到这一点。我希望列表在同一个列表中包含多个子类,否则显然我只能创建一个列表。

编辑:修复了代码中错误的注释,这导致我得到了非常合适的第一个答案:)

例如:

Class Foo 
{
public virtual printMe()
{
Console.Writeline("FOO");
}
}

Class Bar : Foo
{
public override printMe()
{
Console.Writeline("BAR");
}
}

List<Foo> list = new List<Foo>();
// then populate this list with various 'Bar' and other overriden Foos

foreach (Foo foo in list)
{
foo.printMe(); // prints FOO.. Would like it to print BAR
}

最佳答案

class Foo 
{
public virtual void virtualPrintMe()
{
nonVirtualPrintMe();
}

public void nonVirtualPrintMe()
{
Console.Writeline("FOO");
}
}

class Bar : Foo
{
public override void virtualPrintMe()
{
Console.Writeline("BAR");
}
}

List<Foo> list = new List<Foo>();
// then populate this list with various 'Bar' and other overriden Foos

foreach (Foo foo in list)
{
foo.virtualPrintMe(); // prints BAR or FOO
foo.nonVirtualPrintMe(); // always prints FOO
}

关于C# 在不知道它是子类实例的情况下调用重写的子类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/390326/

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