c#语法-反射

反射:就是操作dll文件的一个类库

最近想依赖注入一个泛型的类 不知怎么操作 再来重新复习下反射内容
假设我们有一个.dll文件叫xiaomi,完整路径为
C:\工程文件\xiaomi.dll

一、加载DLL文件

  1. 方式一 Assmbly.Load(“xiaomi”)
Assembly assembly = Assembly.Load("xiaomi");
//这个DLL文件要在启动项目下
  1. 方式二 Assembly.LoadFile(“完整路径”)
Assembly assembly = Assembly.LoadFile(@"C:\工程文件\xiaomi.dll");
  1. 方式三 Assembly.LoadFrom(“以上2种方式的参数都可以”) 还可以用全名xiaomi.dll
Assembly assembly = Assembly.LoadFrom("xiaomi.dll");

二、获取指定类型

此时xiaomi.dll里面有一个类叫ReflectionTest

Type type = assembly.GetType("xiaomi.ReflectionTest");
Type[] types = assembly.GetTypes();//获取当下所有类型
ConstructorInfo[] constructorInfos = types[0].GetConstructors();//获取当下所有构造方法
PropertyInfo[] propertyInfos = types[0].GetProperties();//获取类下所有属性
MethodInfo[] methodInfos = types[0].GetMethods();//获取当前类下所有方法
ParameterInfo[] parameterInfos = constructorInfos[0].GetParameters();//获取该构造方法的所有参数

三、实例化类型

object obj = Activator.CreateInstance(type);
//这种方法我们不知道具体类型 动态实例化
调用有参数的构造方法
new object[]{}可以放置多个参数
object obj = Activator.CreateInstance(type,new object[] { });
调用私有的构造方法 参数最后加个true就好了
object obj = Activator.CreateInstance(type,true);

四、转化类型

已知类型
ReflectionTest reflectionTest = obj as ReflectionTest;
reflectionTest.Show();//调用普通方法
未知类型
MethodInfo? methodInfo = type.GetMethod("show", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);//默认是publilc 这里我们把私有的也找到
object? v = methodInfo.Invoke(obj, new object[] { });

五、调用泛型方法

我们有一个泛型方法叫show()

MethodInfo methodInfo1 = methodInfo.MakeGenericMethod(new Type[] { typeof(int) });

六、调用泛型类型
我们现在有一个泛型类型 GenericClass<T,W>

Type type = assembly.GetType("xiaomi.GenericClass`2").MakeGenericType(typeof(int),typeof(string));
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值