反射提供封装程序集、模块和类型的对象。
反射技术主要基于System.Reflection 命名空间中的类与 System.Type 。
反射用途简单来说就是获取有关程序集中的类型信息。
可以使用反射动态地创建类的实例,将类型绑定到现有的对象,或从现有的对象中获取类型,然后调用其方法、字段或属性。
反射的典型用法:
举例:
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
//加载dll程序集
Assembly assembly = Assembly.Load("DbHelper");
//获取类型、参数(命名空间名称.类名称)
Type type = assembly.GetType("DbHelper.SqlHelper");
//创建实例(命名空间名称.类名称)
var instance = assembly.CreateInstance("DbHelper.SqlHelper");
//获取指定方法
MethodInfo methodInfo = type.GetMethod("GetSqlServerName");
//传入参数
var obj = new object[] { "Mike" };
//调用方法(实例,参数)
methodInfo.Invoke(instance, obj);
Console.ReadKey();
}
}
}
//DbHelper.dll文件生成路径指定到ConsoleApp1程序的bin目录,否则引用失败。
namespace DbHelper
{
public class SqlHelper
{
public void GetSqlServerName(string name)
{
Console.WriteLine($"Name:{name}");
}
}
}