using System;
public class Test
{
public static void Main()
{
var type = typeof(abc);
object instanceToModify = new abc();
var typeToCreate = typeof(GenericClass<>).MakeGenericType(type);
var methodToCall = typeToCreate.GetMethod("GenericMethod");
var genericClassInstance = Activator.CreateInstance(typeToCreate);
methodToCall.Invoke(genericClassInstance, new[] { instanceToModify });
Console.WriteLine(((abc)instanceToModify).a);
Console.WriteLine(((abc)instanceToModify).b);
Console.WriteLine(((abc)instanceToModify).c);
}
}
public class GenericClass<T>
{
public T GenericMethod(T obj)
{
// modify the object in some (arbitrary) way
var fields = obj.GetType().GetFields();
foreach (var field in fields)
{
if (field.FieldType == typeof(string))
{
field.SetValue(obj, "This field's string value was modified");
}
}
return obj;
}
}
public class abc
{
public string a;
public string b;
public int c;
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciB0eXBlID0gdHlwZW9mKGFiYyk7CgkJb2JqZWN0IGluc3RhbmNlVG9Nb2RpZnkgPSBuZXcgYWJjKCk7CgkJCgkJdmFyIHR5cGVUb0NyZWF0ZSA9IHR5cGVvZihHZW5lcmljQ2xhc3M8PikuTWFrZUdlbmVyaWNUeXBlKHR5cGUpOwoJCXZhciBtZXRob2RUb0NhbGwgPSB0eXBlVG9DcmVhdGUuR2V0TWV0aG9kKCJHZW5lcmljTWV0aG9kIik7CgkJCgkJdmFyIGdlbmVyaWNDbGFzc0luc3RhbmNlID0gQWN0aXZhdG9yLkNyZWF0ZUluc3RhbmNlKHR5cGVUb0NyZWF0ZSk7CgkJbWV0aG9kVG9DYWxsLkludm9rZShnZW5lcmljQ2xhc3NJbnN0YW5jZSwgbmV3W10geyBpbnN0YW5jZVRvTW9kaWZ5IH0pOwoJCQoJCUNvbnNvbGUuV3JpdGVMaW5lKCgoYWJjKWluc3RhbmNlVG9Nb2RpZnkpLmEpOwoJCUNvbnNvbGUuV3JpdGVMaW5lKCgoYWJjKWluc3RhbmNlVG9Nb2RpZnkpLmIpOwoJCUNvbnNvbGUuV3JpdGVMaW5lKCgoYWJjKWluc3RhbmNlVG9Nb2RpZnkpLmMpOwoJfQp9CgpwdWJsaWMgY2xhc3MgR2VuZXJpY0NsYXNzPFQ+CnsKICAgIHB1YmxpYyBUIEdlbmVyaWNNZXRob2QoVCBvYmopCiAgICB7CiAgICAgICAgLy8gbW9kaWZ5IHRoZSBvYmplY3QgaW4gc29tZSAoYXJiaXRyYXJ5KSB3YXkKICAgICAgICB2YXIgZmllbGRzID0gb2JqLkdldFR5cGUoKS5HZXRGaWVsZHMoKTsKICAgICAgICBmb3JlYWNoICh2YXIgZmllbGQgaW4gZmllbGRzKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGZpZWxkLkZpZWxkVHlwZSA9PSB0eXBlb2Yoc3RyaW5nKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZmllbGQuU2V0VmFsdWUob2JqLCAiVGhpcyBmaWVsZCdzIHN0cmluZyB2YWx1ZSB3YXMgbW9kaWZpZWQiKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG9iajsKICAgIH0KfQoKcHVibGljIGNsYXNzIGFiYwp7CiAgICBwdWJsaWMgc3RyaW5nIGE7CiAgICBwdWJsaWMgc3RyaW5nIGI7CiAgICBwdWJsaWMgaW50IGM7Cn0=