用字符串创建对象

用户名

所以,这是交易。我有一个名为IBehavior的接口。我的每个实体都有一个变量:private IBehavior _behavior每个实体还具有一个变量:public string Behavior加载我的实体后,该字符串将从xml文件填充。随后,init()在所有实体上调用一个称为的函数此方法采用字符串,并使用以下代码行调用所需的构造函数:Type.GetType(Behavior).GetConstructor(Type.EmptyTypes).Invoke(null);

不幸的是,Invoke()方法返回的对象类型为Object,而_behavior变量在不进行强制转换的情况下将不接受此类型。我曾尝试这个办法:_behavior = (IBehavior)Type.GetType(Behavior).GetConstructor(Type.EmptyTypes).Invoke(null);

这一切都告诉我我的_bahavior变量为空,因此这不可能发生。我可能使用GetConstructor()不正确。有人能指出我正确的方向吗?

初始化功能:

public void Init()
{
  if (Behavior == "null" || Behavior == "none")
  {
    _behavior = null;
    return;
  }

  _behavior = (IBehavior) Type.GetType(Behavior).GetConstructor(Type.EmptyTypes).Invoke(new object(), null);
}
康拉德·科科萨(Konrad Kokosa)

要根据名称创建类型,请使用:

_behavior = (IBehavior)Activator.CreateInstance(Type.GetType(Behavior));

代码的另一个问题是new object()因为使用MethodBase.Invoke(Object, Object[])方法所以正在调用构造函数

.GetConstructor(Type.EmptyTypes).Invoke(new object(), null)

通过仅指定对象数组,可以使用ConstructorInfo.Invoke(Object[])方法:

_behavior = (IBehavior)Type.GetType(Behavior)
                           .GetConstructor(Type.EmptyTypes)
                           .Invoke(new object[] { });

注意:如果ArgumentNullException接收Activator.CreateInstance,请记住必须使用名称空间指定类型(如果在同一程序集中定义),例如:

Activator.CreateInstance(Type.GetType("ConsoleApplication.SomeClass"))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用字符串创建对象

来自分类Dev

使用字符串作为名称创建对象

来自分类Dev

如何使用字符串创建File对象

来自分类Dev

通过创建新的字符串对象来调用字符串的方法

来自分类Dev

用字符串数组循环对象

来自分类Dev

用字符串扩展对象标题

来自分类Dev

使用字符串创建变量

来自分类Dev

VBA用字符串创建日期

来自分类Dev

用字符串创建矩阵 - Swift

来自分类Dev

如何用字符串创建名称为对象的对象?

来自分类Dev

如何用字符串创建名称为对象的对象?

来自分类Dev

将 json 作为字符串保存到 CoreData 并使用字符串创建对象数组

来自分类Dev

如何使用FastDateFormat使用字符串创建Date对象

来自分类Dev

C#使用字符串中的名称创建一个对象的许多实例

来自分类Dev

C#使用字符串数组中的嵌套对象动态创建JSON

来自分类Dev

如何使用FastDateFormat使用字符串创建Date对象

来自分类Dev

使用字符串键在JavaScript中创建对象的2D数组

来自分类Dev

是否有Razor助手,可让您使用字符串和对象创建url

来自分类Dev

字符串对象的创建

来自分类Dev

用字符串中的特定字符创建数组

来自分类Dev

使用字符串列表动态创建对象?

来自分类Dev

用字符串代替对象代替返回数组

来自分类Dev

使用字符串检索对象的值

来自分类Dev

使用字符串作为键迭代JavaScript对象

来自分类Dev

用字符串变量调用Javascript对象

来自分类Dev

如何使用字符串访问对象属性?

来自分类Dev

使用字符串而不是对象搜索字典键

来自分类Dev

使用字符串名称访问对象成员

来自分类Dev

使用字符串设置对象属性