using System;
using System.Reflection;
public interface IMyInterface
{
void DoSomething();
}
public class MyClass<T> : IMyInterface
{
public T Value { get; set; }
public void DoSomething()
{
Console.WriteLine("Did something");
}
}
public class Test
{
public static void Main()
{
var testVar = 123;
var genType = typeof(MyClass<>).MakeGenericType(testVar.GetType());
var genInstance = Activator.CreateInstance(genType);
Console.WriteLine(genInstance.GetType().FullName);
var myInterfaceInstance = (IMyInterface) genInstance;
myInterfaceInstance.DoSomething();
object value = genType.InvokeMember("Value", BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty,
null, genInstance, null);
Console.WriteLine(value);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uUmVmbGVjdGlvbjsKCnB1YmxpYyBpbnRlcmZhY2UgSU15SW50ZXJmYWNlCnsKCXZvaWQgRG9Tb21ldGhpbmcoKTsKfQoKcHVibGljIGNsYXNzIE15Q2xhc3M8VD4gOiBJTXlJbnRlcmZhY2UKewoJcHVibGljIFQgVmFsdWUgeyBnZXQ7IHNldDsgfQoJcHVibGljIHZvaWQgRG9Tb21ldGhpbmcoKQoJewoJCUNvbnNvbGUuV3JpdGVMaW5lKCJEaWQgc29tZXRoaW5nIik7Cgl9Cn0KCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQl2YXIgdGVzdFZhciA9IDEyMzsKCQl2YXIgZ2VuVHlwZSA9IHR5cGVvZihNeUNsYXNzPD4pLk1ha2VHZW5lcmljVHlwZSh0ZXN0VmFyLkdldFR5cGUoKSk7CgkJdmFyIGdlbkluc3RhbmNlID0gQWN0aXZhdG9yLkNyZWF0ZUluc3RhbmNlKGdlblR5cGUpOwoJCUNvbnNvbGUuV3JpdGVMaW5lKGdlbkluc3RhbmNlLkdldFR5cGUoKS5GdWxsTmFtZSk7CgkJdmFyIG15SW50ZXJmYWNlSW5zdGFuY2UgPSAoSU15SW50ZXJmYWNlKSBnZW5JbnN0YW5jZTsKCQlteUludGVyZmFjZUluc3RhbmNlLkRvU29tZXRoaW5nKCk7CgkJb2JqZWN0IHZhbHVlID0gZ2VuVHlwZS5JbnZva2VNZW1iZXIoIlZhbHVlIiwgQmluZGluZ0ZsYWdzLlB1YmxpYyB8IEJpbmRpbmdGbGFncy5JbnN0YW5jZSB8IEJpbmRpbmdGbGFncy5HZXRQcm9wZXJ0eSwgCgkJICAgIG51bGwsIGdlbkluc3RhbmNlLCBudWxsKTsKCQlDb25zb2xlLldyaXRlTGluZSh2YWx1ZSk7Cgl9Cn0=