直接从类实例的一个成员方法中检索类实例的引用,该方法在 C# 中作为参数传递到不同类的方法中

问题描述 投票:0回答:1

我正在用 Unity 开发一个项目。我认为代码示例会自行解释。

注意事项:

  1. 模块构造函数不需要任何其他参数,例如引用容器实例的“this”

  2. 仅模块构造函数参数必须保留为 IEnumerator,而不是 Func<> 等

  3. 作为参数传递的协程,不会被直接调用(例如 StartCoroutine(...) )

  4. 模块 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()
             {...}
     }
    
c# unity3d methods reflection
1个回答
0
投票

Afaik 没有办法做到这一点,即使你使用反射。

IEnumerator 是一种动态列表——一个运行代码来解析其内容的列表,代码在技术上驻留在它的主体中,因此您可以通过反射获得的最好的是一些废话,或 typeof(IEnumerator)。

您可以通过在 sharplab 中尝试编译来查看它的外观: https://sharplab.io/#v2:CYLg1APgAgTAjAWAFBQAwAIpwHQGED2ANoQKYDGALgJb4B2AzgNzLJQDMmM6u6A3sukHoARviLoAHugC86CgCcAriWZIh6KrQroAZjPSpV6gUICSAUVqKAtiXkBDCvnnoLV2w6fyAQiQAWmsAAKn4kABJiwAAUAJR8JuqCVHpRAIQScbyYcHAi8iT2ANaM6AC+CYkA7gGk6FF6ADzocKitqJm6YGAlWLlQAOzoVsQl5WpCY8ZIpUA===

如您所见,从技术上讲,枚举器中有容器的引用,但我还没有设法获得它(我认识的人也没有),所以,如果你成功了,请告诉我!

© www.soinside.com 2019 - 2024. All rights reserved.