public int publicIntField;
public string publicStringField;
public int publicIntProp {get; set;}
public string publicStringProp {get; set;}
public static int staticInt;
public static void Main()
var src = new TestClass();
src.publicStringField = "foo";
src.publicStringProp = "baz";
var dest = new TestClass();
TestClass dest1 = DoItWithGenerics(src);
public static void DoIt(object src, object dest)
Console.WriteLine("DoIt");
foreach (PropertyInfo p in t.GetProperties(BindingFlags.Public|BindingFlags.Instance))
Console.WriteLine(p.Name);
p.SetValue(dest, p.GetValue(src));
foreach (FieldInfo fi in t.GetFields(BindingFlags.Public|BindingFlags.Instance))
Console.WriteLine(fi.Name);
fi.SetValue(dest, fi.GetValue(src));
Console.WriteLine("*****");
public static T DoItWithGenerics<T>(T src) where T:new()
Console.WriteLine("DoItWithGenerics");
foreach (PropertyInfo p in t.GetProperties(BindingFlags.Public|BindingFlags.Instance))
Console.WriteLine(p.Name);
p.SetValue(dest, p.GetValue(src));
foreach (FieldInfo fi in t.GetFields(BindingFlags.Public|BindingFlags.Instance))
Console.WriteLine(fi.Name);
fi.SetValue(dest, fi.GetValue(src));
Console.WriteLine("*****");