【发布时间】:2018-01-19 10:02:33
【问题描述】:
我有一个类,其属性如下所示:
public class Hmd{
Transform HmdTransform{
get{ device.GetTransform(); }
}
}
device.GetTransform() 从驱动程序获取转换。
现在我想在运行时将属性的 get 方法更改为:
public class Hmd{
private Transform hmdTransform;
Transform HmdTransform{
get{ return hmdTransform; }
}
}
有没有办法做到这一点?我将不得不创建一个新成员并更改吸气剂。如果我不能创建新成员,我可以更改device.GetTransform() 行吗?
我想我必须使用 Reflection.Emit?
额外的复杂性:所有这些都在 Unity 中,所以我只能使用 Mono。
【问题讨论】:
-
这似乎是XY problem。你真正需要什么?为什么在编译时不能有私有字段?
-
您可以为属性将调用的类提供
Func<Transform>。这样你就可以将任何你喜欢的东西传递给它。但是,正如 Camilo 所说,这对于您在这里想要实现的目标来说可能是多余的。如果您提供更多背景信息,我们可以提出更好的解决方案。 -
绝对是 XY 问题。您试图通过明显的肮脏黑客解决的真正问题是什么?
-
我知道这听起来很奇怪,我可能应该从另一个角度来处理这个问题(对类提出要求,而不是事后改变它们)但是我正在构建一个回放系统,我的主要目标是对我想要记录的成员(到目前为止有效)做出尽可能少的假设。当我想将数据反馈到以动态方式获取数据的对象中时,就会出现问题。
标签: c# unity3d reflection mono reflection.emit