using System;
public class Foo
{
public Foo(){}
public virtual void Print()
{
Console.WriteLine("Foo");
}
}
public class Bar : Foo
{
public Bar(){}
public void Print()
{
Console.WriteLine("Bar");
}
}
public class OverrideBar : Foo
{
public OverrideBar(){}
public override void Print()
{
Console.WriteLine("Bar");
}
}
public class Test
{
public static void Main()
{
Foo foo = new Foo();
Bar bar = new Bar();
OverrideBar oBar = new OverrideBar();
Foo fooBar = (Foo)bar;
Foo fooOBar = (Foo)oBar;
Console.WriteLine("Foo prints:");
foo.Print();
Console.WriteLine("Bar prints:");
bar.Print();
Console.WriteLine("OverrideBar prints:");
oBar.Print();
Console.WriteLine("Bar as a Foo prints:");
fooBar.Print();
Console.WriteLine("OverrideBar as a Foo prints:");
fooOBar.Print();
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIEZvbwp7CglwdWJsaWMgRm9vKCl7fQoJcHVibGljIHZpcnR1YWwgdm9pZCBQcmludCgpCgl7CgkJQ29uc29sZS5Xcml0ZUxpbmUoIkZvbyIpOwoJfQp9CgpwdWJsaWMgY2xhc3MgQmFyIDogRm9vCnsKCXB1YmxpYyBCYXIoKXt9CglwdWJsaWMgdm9pZCBQcmludCgpCgl7CgkJQ29uc29sZS5Xcml0ZUxpbmUoIkJhciIpOwoJfQp9CgpwdWJsaWMgY2xhc3MgT3ZlcnJpZGVCYXIgOiBGb28KewoJcHVibGljIE92ZXJyaWRlQmFyKCl7fQoJcHVibGljIG92ZXJyaWRlIHZvaWQgUHJpbnQoKQoJewoJCUNvbnNvbGUuV3JpdGVMaW5lKCJCYXIiKTsKCX0KfQoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCUZvbyBmb28gPSBuZXcgRm9vKCk7CgkJQmFyIGJhciA9IG5ldyBCYXIoKTsKCQlPdmVycmlkZUJhciBvQmFyID0gbmV3IE92ZXJyaWRlQmFyKCk7CgkJRm9vIGZvb0JhciA9IChGb28pYmFyOwoJCUZvbyBmb29PQmFyID0gKEZvbylvQmFyOwoJCQoJCUNvbnNvbGUuV3JpdGVMaW5lKCJGb28gcHJpbnRzOiIpOwoJCWZvby5QcmludCgpOwoJCUNvbnNvbGUuV3JpdGVMaW5lKCJCYXIgcHJpbnRzOiIpOwoJCWJhci5QcmludCgpOwoJCUNvbnNvbGUuV3JpdGVMaW5lKCJPdmVycmlkZUJhciBwcmludHM6Iik7CgkJb0Jhci5QcmludCgpOwoJCUNvbnNvbGUuV3JpdGVMaW5lKCJCYXIgYXMgYSBGb28gcHJpbnRzOiIpOwoJCWZvb0Jhci5QcmludCgpOwoJCUNvbnNvbGUuV3JpdGVMaW5lKCJPdmVycmlkZUJhciBhcyBhIEZvbyBwcmludHM6Iik7CgkJZm9vT0Jhci5QcmludCgpOwoJfQp9