[英]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.