C#调用重写的子类方法,而不知道它是一个子类实例

Joh*_*nan 4 c# virtual inheritance overriding subclass

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

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

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

例如:

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
} 
Run Code Online (Sandbox Code Playgroud)

Dan*_*ker 8

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
}
Run Code Online (Sandbox Code Playgroud)