C#反射

1、反射就是动态获取程序集的元数据的功能 没有通过添加引用 和使用使用using就是用的反射原理

2、Type 类实现反射的一个重要的类

ctrl+shift + f12

// 加载程序集文件 AppDomain.CurrentDomain.BaseDirectory  获得exe 所在目录的根路径
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Common.dll");
 // 首先加载程序集
Assembly ass = Assembly.LoadFile(path);
// 获得所有公开的数据 GetExportedTypes
 Type[] types =  ass.GetExportedTypes();
foreach (var item in types)
{
    Console.WriteLine(item.Name);
    Console.WriteLine(item.FullName);
    Console.WriteLine(item.Namespace);
}

// 获得所有的类数据(包括私有的)
Type[] types = ass.GetTypes();

// 通过对象 获得指定的 name 类型信息

Type t = ass.GetTypes(“name”);

// 通过类获得Type: Type t = typeof(Person)

二,动态创建对象


/ / 动态创建对象  // 这个方法 CreateInstance 默认调用的是无参构造函数
            object ob = ass.CreateInstance("Common.Person");

			// 调用有参构造函数			
			Type type = ass.GetType("Common.Person");
            object o = Activator.CreateInstance(type, 18, "张三");
            // 获得当前类的所有属性
            PropertyInfo[] info = o.GetType().GetProperties();
            foreach (var item in info)
            {
                Console.WriteLine(item.Name);
            }
            // 获得程序集的所有方法
             MethodInfo[] methodInfo = o.GetType().GetMethods();
             foreach (var item in methodInfo)
             {
                 Console.WriteLine(item);
             }

如何通过反射去执行函数呢?

// 获得要调用的函数
MethodInfo me =  o.GetType().GetMethod("showAll");
// invoke 执行函数
me.Invoke(o, null);

Type类的方法

bool isAssignableFrom(Type c) : 直译 是否可以从c赋值 判断当前的类型变量是不是可以接受c

类型的赋值

bool IsInstanceOfType(object o) : 判断对象o是当前类的实例

bool isSubclassOd(Type c) 判断当前类的子类 没有借口的事

isAbstract 判断是否为接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值