C#中无法修改原类时,如何访问私有静态字段?
解决方法:通过反射访问私有静态字段
在无法修改原LevelLighting类代码的前提下,可以使用C#的反射机制来访问并修改其私有静态字段auroraBorealisCurrentIntensity。
具体实现代码
using System.Reflection; // 获取目标类的Type信息 Type levelLightingType = typeof(LevelLighting); // 检索私有静态字段 FieldInfo auroraField = levelLightingType.GetField( "auroraBorealisCurrentIntensity", BindingFlags.Static | BindingFlags.NonPublic ); // 修改字段值(静态字段传入null作为实例参数) if (auroraField != null) { auroraField.SetValue(null, 1f); } // 读取字段值示例 if (auroraField != null) { float currentIntensity = (float)auroraField.GetValue(null); // 可基于读取的值执行后续逻辑 }
注意事项
- 反射会绕过类的封装权限设计,可能引发不可预见的逻辑问题,需谨慎使用
- 若原类的字段名称、访问修饰符或内部结构发生变更,反射代码会直接失效
- 在特殊编译环境(如Unity IL2CPP编译、经过代码混淆的程序集)中,反射可能无法正常运行
内容的提问来源于stack exchange,提问作者refreshyt
相关产品推荐
相关产品推荐

