反射(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也是运用很多反射大家自己可以学习以上就是一个简单介绍