C# Activator实例化类的一般步骤

1.获得要创建实例的类的类名

var className = "(命名空间namespace).ClassName";

2.得到当前类的类型

var classType = Type.GetType(className);
   或者
 var classType = typeof(className);

3.创建实例化类的参数数组

var args = new object[] { object1, object2,object 3...};

4.使用Activator实例化类

var classInstance = Activator.CreateInstance(classType, args);

    Activator.CreateInstance 方法的第一个参数是要创建的类型,第二个参数是可选的,用于指定构造函数的参数。如果要创建的类型没有默认构造函数,那么必须传递构造函数所需的参数。如果要创建的类型有默认构造函数,那么第二个参数可以为空。此外,Activator.CreateInstance 方法返回的是 object 类型,需要进行强制类型转换。

或者
var classInstance = classType.InvokeMember("", BindingFlags.CreateInstance, null, null, null);

     InvokeMember 方法的第一个参数是空字符串,因为我们要调用的是构造函数,而不是方法、属性或字段。第二个参数是 BindingFlags.CreateInstance 标志,表示创建对象实例;第三个参数是绑定器,用于指定成员查找的方式;第四个参数是目标对象,因为我们要创建的是对象实例,所以目标对象为 null;第五个参数是构造函数参数,用于传递给构造函数的参数

5.得到要执行的方法

var method = classType.GetMethod("MathodName");

6.执行方法

  return method.Invoke(classInstance, null);
或
   return  classType .InvokeMember("MathodName", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, classInstance , null);

Invoke 和 InvokeMember 都是反射中用于调用方法的方法,但它们有一些区别:

  1. 参数列表不同:Invoke 方法的第二个参数是 object[] 类型的数组,用于传递方法的参数;而 InvokeMember 方法的第三个参数是 BindingFlags 枚举类型,用于指定方法的访问权限、搜索方式等信息。

  2. 访问权限不同:Invoke 方法可以调用 public、protected、private 等所有访问权限的方法,而 InvokeMember 方法需要指定对应的 BindingFlags,才能调用对应访问权限的方法。

  3. 安全性不同:Invoke 方法可以执行非托管代码,因此需要受到安全性限制;而 InvokeMember 方法只能执行托管代码,因此相对更安全。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值