using System.Globalization;
public Foo(string a = null, string b = null)
Console.WriteLine("Foo called with a = " + (a ?? "<null>") + " and b = " + (b ?? "<null>"));
public static void Main()
var bf = BindingFlags.CreateInstance | BindingFlags.Public | BindingFlags.Instance | BindingFlags.OptionalParamBinding;
Activator.CreateInstance(typeof(Foo), bf, null, new object [] { }, CultureInfo.CurrentCulture);
Activator.CreateInstance(typeof(Foo), bf, null, new object [] { "Foo" }, CultureInfo.CurrentCulture);
Activator.CreateInstance(typeof(Foo), bf, null, new object [] { "Foo", "Bar" }, CultureInfo.CurrentCulture);