using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Sample3 s3 = new Sample3(); s3.write(new Sample1()); s3.write(new Sample2()); s3.write(new Sample0()); } } class Sample0 { } class Sample1 { public void write() { Console.WriteLine("1"); } } class Sample2 { public void write() { Console.WriteLine("2"); } } class Sample3 { public void write(Object x) { if (x.GetType().GetMethod("write") == null) { Console.WriteLine("Invalid argument"); } else { x.GetType().InvokeMember("write", System.Reflection.BindingFlags.InvokeMethod, null, Activator.CreateInstance(x.GetType(), true), null); } } } }