繁体   English   中英

通过反射实例化无法访问的类的数组

[英]Instantiating an array of inaccessible class through reflection

我目前正在使用Unity3D引擎开发游戏。 我们需要使用Curve Editor来描述给定咒语的伤害等级。 Unity3D引擎的C#程序集中已经存在带有所需功能的Curve Editor类,但是无法访问。 我试图通过反射实例化该类型的对象。 但是我遇到了一个问题。 此类的构造函数需要一些参数,其中的一个恰好是另一个无法访问的类的数组。 这就是问题所在。 我能够通过反射构造一个对象,但不能通过该类型的对象数组来构造对象。 这是构造函数:

public CurveEditor(Rect rect, CurveWrapper[] curves, bool minimalGUI){...}

我能够用Reflection构造一个CurveWrapper对象,但不能构造一个完整的数组。 我试图创建Object[]数组并在其中放置一些CurveWrapper对象,但是当我通过反射将该数组传递给构造函数时,我得到了无效的参数异常。

有人可以协助我吗?

我怀疑您在寻找Array.CreateInstance

Type type = ...; // However you get to CurveWrapper
IList array = Array.CreateInstance(type, 2);
array[0] = Activator.CreateInstance(type);
array[1] = Activator.CreateInstance(type);

我不得不说虽然,如果CurveEditor是人迹罕至,我不会试图得到它非常反思。 即使现在可以使用,我认为对于Unity3D人员以后对其进行不兼容的更改也是完全合理的。 使用非公共API会导致代码非常脆弱。

如果您要为Unity3D中的某些内容编写编辑器,则所需的大部分(如果不是全部)内容是EditorGUI助手的一部分,例如EditorGUI.CurveField ,它将为您在检查器中呈现曲线编辑器(前提是您是在用于正确类型的对象的编辑器类中工作)。

无需手动实例化一个实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM