前言
今天為了程序能寫好看一點,一直在糾結怎么指定動態泛型,
但是想想實用性好像不太大,可是把這技術忘掉太可惜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