using System;
public class Base {};
public class Derived : Base {};
public static class Extensions {
public static void Foo(this Base x) { Console.WriteLine("Base.Foo"); }
public static void Foo(this Derived x) { Console.WriteLine("Derived.Foo"); }
}
public static class Program {
public static void Main(string[] args) {
Base x = new Derived();
x.Foo();
(x as Derived).Foo();
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIEJhc2Uge307CnB1YmxpYyBjbGFzcyBEZXJpdmVkIDogQmFzZSB7fTsKCnB1YmxpYyBzdGF0aWMgY2xhc3MgRXh0ZW5zaW9ucyB7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgRm9vKHRoaXMgQmFzZSB4KSB7IENvbnNvbGUuV3JpdGVMaW5lKCJCYXNlLkZvbyIpOyB9CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgRm9vKHRoaXMgRGVyaXZlZCB4KSB7IENvbnNvbGUuV3JpdGVMaW5lKCJEZXJpdmVkLkZvbyIpOyB9Cn0KCnB1YmxpYyBzdGF0aWMgY2xhc3MgUHJvZ3JhbSB7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgTWFpbihzdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgQmFzZSB4ID0gbmV3IERlcml2ZWQoKTsKICAgICAgICB4LkZvbygpOwogICAgICAgICh4IGFzIERlcml2ZWQpLkZvbygpOwogICAgfQp9Cg==