I have a base class with a virtual method, and multiple subclasses that override that method.
When I encounter one of those subclasses, I would like to call the overridden method, but without knowledge of the subclass. I can think of ugly ways to do this (check a value and cast it), but it seems like there should be an in-language way to do it. I want the List to contain multiple subclasses within the same list, otherwise obviously I could just make a List.
EDIT: Fixed the comment in the code that was wrong, which lead to the very appropriate first answer I got :)
For instance:
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
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With