我正在用 Unity 开发一个项目。我认为代码示例会自行解释。
注意事项:
模块构造函数不需要任何其他参数,例如引用容器实例的“this”
仅模块构造函数参数必须保留为 IEnumerator,而不是 Func<> 等
作为参数传递的协程,不会被直接调用(例如 StartCoroutine(...) )
模块 CTOR 内的代码逻辑不得移动到单独的方法(公共方法或扩展方法)中。
class Module
{
// CTOR
public Module(IEnumerator _someCoroutine)
{
// This is where I need to get the reference to the
// instance of a Container class (not "typeof(Container)")
// which _someCoroutine method's reference is held,
// directly from _someCoroutine parameter
}
}
class Container : MonoBehaviour
{
Module module = new Module(SomeCoroutine());
IEnumerator SomeCoroutine()
{...}
}
Afaik 没有办法做到这一点,即使你使用反射。
IEnumerator 是一种动态列表——一个运行代码来解析其内容的列表,代码在技术上驻留在它的主体中,因此您可以通过反射获得的最好的是一些废话,或 typeof(IEnumerator)。
如您所见,从技术上讲,枚举器中有容器的引用,但我还没有设法获得它(我认识的人也没有),所以,如果你成功了,请告诉我!