反射(Reflection)可以在運行時獲 得.NET中每一個類型(包括類、結構、委托、接口和枚舉等)的成員,包括方法、屬性、事件,以及構造函數等。還可以獲得每個成員的名稱、限定符和參數等反正說白了就是通過反射能夠獲取一個未知類的類型。下面通過代碼來講解
1:反射的基本用法
public class ReflectionTest { /// <summary> /// 反射名稱 /// </summary> public string ReflectionName { get; set; } public string GetName() { return "張三"; } }
Type type = typeof(ReflectionTest); string name = type.Name;//獲取當前成員的名稱 string fullName = type.FullName;//獲取類的全部名稱不包括程序集 string nameSpace = type.Namespace;//獲取該類的命名空間 var assembly = type.Assembly;//獲取該類的程序集名 var module = type.Module;//獲取該類型的模塊名 var memberInfos = type.GetMembers();//得到所有公共成員
在控制台打印結果如下圖:
//獲取當前執行代碼的程序集 Assembly assem = Assembly.GetExecutingAssembly(); Console.WriteLine(assem.FullName); var types = assem.GetTypes();//程序集下所有的類 Console.WriteLine("程序集包含的類型:"); foreach (var item in types) { Console.WriteLine("類" + item.Name); }
打印結果
2:通過反射建立工廠
public static T Instance<T>(string assembly, string type) { if (string.IsNullOrEmpty(type)) throw new ArgumentException("type:參數不能為空!"); //1、獲取有效的程序集 Assembly mAssembly = string.IsNullOrEmpty(assembly) ? Assembly.GetCallingAssembly() : Assembly.Load(assembly); var t = (T) mAssembly.CreateInstance(type); return t; }
- 參數assembly 指的是程序dll的路徑如果本地傳空
- 參數type 指的是指定類的路徑
調用:var assembly = Instance<DogInfo>("", "AenericApp.Entity.DogInfo");即可
當然orm也是運用很多反射大家自己可以學習以上就是一個簡單介紹