using System; public class A { } public class B : A { } static class MultiMaybeMethods { public static void Mumble (this int i, string x) { Console.WriteLine (x); } public static void Mumble (this int i, int x) { Console.WriteLine (x); } public static void Mumble (this int i, A a ) { Console.WriteLine (a); } public static void Mumble (this int i, B b ) { Console.WriteLine (b); } public static void Mumble (this int i, object o) { Console.WriteLine (o); } } class Foo { public void Bumble (string x) { Console.WriteLine (x); } public void Bumble (int x) { Console.WriteLine (x); } public void Bumble (A a ) { Console.WriteLine (a); } public void Bumble (B b ) { Console.WriteLine (b); } public void Bumble (object o) { Console.WriteLine (o); } public void DoStuff (int i, object o) { i.Mumble (o); Bumble (o); } public static void Main (string[] args) { int i = 2; Foo m = new Foo (); i.Mumble ("hi"); m.Bumble ("hi"); i.Mumble (5); m.Bumble (5); i.Mumble (new A()); m.Bumble (new A()); i.Mumble (new B()); m.Bumble (new B()); i.Mumble ((A)(new B())); m.Bumble ((A)(new B())); m.DoStuff (i, new B()); } }