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