public static Foo Default { get { return new Foo(5); } }
public static class GetDefaultHelper
public static T GetDefaultInstance<T>()
var propInfo = typeof(T).GetProperty("Default", BindingFlags.Public | BindingFlags.Static);
return (propInfo != null) ? (T)propInfo.GetValue(null) : default(T);
public static void Main()
var myFoo = GetDefaultHelper.GetDefaultInstance<Foo>();
var myBar = GetDefaultHelper.GetDefaultInstance<Bar>();
Console.WriteLine(myFoo._x);
Console.WriteLine(myBar._x);