Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问unity中其他模块的公共字段_C#_Reflection_Unity3d - Fatal编程技术网

C# 访问unity中其他模块的公共字段

C# 访问unity中其他模块的公共字段,c#,reflection,unity3d,C#,Reflection,Unity3d,我试图从另一个类库(mod)中读取Kerbal太空计划的字段。我无法直接访问该字段,因为编译器不知道该字段,并且它属于不同的命名空间 以下是我要访问的字段的来源: namespace ferram4 { public class FARControlSys : FARBaseAerodynamics { public static double termVel; } } 是否可以在运行时使用反射执行此操作?您可以使用并传递类型的 一旦你有了类型,你可以调

我试图从另一个类库(mod)中读取Kerbal太空计划的字段。我无法直接访问该字段,因为编译器不知道该字段,并且它属于不同的命名空间

以下是我要访问的字段的来源:

namespace ferram4
{
    public class FARControlSys : FARBaseAerodynamics
    {
        public static double termVel;
    }
}

是否可以在运行时使用反射执行此操作?

您可以使用并传递类型的

一旦你有了类型,你可以调用它来获取相关字段的字段对象,然后你可以使用
FieldInfo
的适当方法来计算字段的值


显然,你需要确保你做了所有适当的空/失败检查,以处理你正在插入的另一个mod没有加载的情况(或者处理国防部最终更改成员名称的情况,这是可以想象的,尽管可能性稍小,因为该字段不是私有实现细节).

该字段是公共的,为什么您不能访问它?错误是什么?是因为您不能在生成时添加对包含该成员的程序集的引用,而只能在运行时将其加载到您的地址空间吗?为什么您不能添加对它的引用?确切地说,我不能(据我所知)添加对另一个mod的引用,Unity引擎正在加载和使用它。如果有一种方法可以查看该mod是否加载而不修改其代码,并且在不需要其他mods DLL或源代码的情况下编译我的代码,那就太好了!你怎么可能不使用
var mydouble=ferram4.FARControlSys.termVel;
?因为在编译时,听起来像是,包含ferram4的程序集没有被引用,所以编译器无法解析字段。太好了!这就成功了!我不得不对程序集限定名进行一些研究,最后下载了Reflector的试用版来找到它。