using System;
class Base
{
public Base()
{
Console.WriteLine("Base::Base");
((Derived)this).Foo();
}
public void Foo()
{
Console.WriteLine("Base::Foo");
}
}
class Derived : Base
{
public Derived()
{
Console.WriteLine("Derived::Derived");
}
public void Foo()
{
Console.WriteLine("Derived::Foo");
}
}
public class Test
{
public static void Main()
{
new Derived();
}
}
dXNpbmcgU3lzdGVtOwoKY2xhc3MgQmFzZQp7CiAgICBwdWJsaWMgQmFzZSgpCiAgICB7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIkJhc2U6OkJhc2UiKTsKICAgICAgICAoKERlcml2ZWQpdGhpcykuRm9vKCk7CiAgICB9CiAgICBwdWJsaWMgdm9pZCBGb28oKQogICAgewogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJCYXNlOjpGb28iKTsKICAgIH0KfQpjbGFzcyBEZXJpdmVkIDogQmFzZQp7CiAgICBwdWJsaWMgRGVyaXZlZCgpCiAgICB7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIkRlcml2ZWQ6OkRlcml2ZWQiKTsKICAgIH0KICAgIHB1YmxpYyB2b2lkIEZvbygpCiAgICB7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIkRlcml2ZWQ6OkZvbyIpOwogICAgfQp9CgpwdWJsaWMgY2xhc3MgVGVzdAp7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CgkJbmV3IERlcml2ZWQoKTsKCX0KfQ==