前言
今天为了程序能写好看一点,一直在纠结怎么指定动态泛型,
但是想想实用性好像不太大,可是把这技术忘掉太可惜XD
还是记录下来,以防忘记
以下程序范例
类1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
public class DynamicGeneric<T> where T : class , new() { public string Name { get; set; }
public void () { Console.WriteLine("Hello"); }
public T () { return new T(); } }
public class MyClass1 { public string MyProperty { get; set; }
public void MyMethod() { Console.WriteLine("I'm Class1 Method"); } }
|
执行过程
执行过程1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 大专栏 [C#] 动态指定泛型类型21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| static void Main(string[] args) { var genericListType = typeof(DynamicGeneric<>); var specificListType = genericListType.MakeGenericType(typeof(MyClass1)); object instance = Activator.CreateInstance(specificListType); Type instanceType = instance.GetType(); string name = instanceType.InvokeMember( "Name", System.Reflection.BindingFlags.GetProperty, null, instance, null ) as string;
instanceType.InvokeMember( "SayHello", BindingFlags.InvokeMethod, null, instance, null );
}
|
参考数据
stackoverflow
dotblogs
msdn