using System;
public class Test
{
class A
{
public void foo()
{
Console.WriteLine("A::foo()");
}
public virtual void bar()
{
Console.WriteLine("A::bar()");
}
}
class B : A
{
public /*new*/ void foo()
{
Console.WriteLine("B::foo()");
}
public override void bar()
{
Console.WriteLine("B::bar()");
}
}
public static void Main()
{
B b = new B();
A a = b;
a.foo(); // Prints A::foo
b.foo(); // Prints B::foo
a.bar(); // Prints B::bar
b.bar(); // Prints B::bar
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIFRlc3QKewoJY2xhc3MgQQoJewoJICAgIHB1YmxpYyB2b2lkIGZvbygpCgkgICAgewoJICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiQTo6Zm9vKCkiKTsKCSAgICB9CgkgICAgcHVibGljIHZpcnR1YWwgdm9pZCBiYXIoKQoJICAgIHsKCSAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIkE6OmJhcigpIik7CgkgICAgfQoJfQoJCgljbGFzcyBCIDogQQoJewoJICAgIHB1YmxpYyAvKm5ldyovIHZvaWQgZm9vKCkKCSAgICB7CgkgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJCOjpmb28oKSIpOwoJICAgIH0KCSAgICBwdWJsaWMgb3ZlcnJpZGUgdm9pZCBiYXIoKQoJICAgIHsKCSAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIkI6OmJhcigpIik7CgkgICAgfQoJfQoJCglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CiAgICAgICAgQiBiID0gbmV3IEIoKTsKICAgICAgICBBIGEgPSBiOwogICAgICAgIGEuZm9vKCk7IC8vIFByaW50cyBBOjpmb28KICAgICAgICBiLmZvbygpOyAvLyBQcmludHMgQjo6Zm9vCiAgICAgICAgYS5iYXIoKTsgLy8gUHJpbnRzIEI6OmJhcgogICAgICAgIGIuYmFyKCk7IC8vIFByaW50cyBCOjpiYXIKCX0KfQ==