访问主类时查看其他类的方法? C#

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

我想以优雅的方式解决我的问题,而不是将我的其他类的所有方法写入主组件类(超过100个方法)

所以,在简化版本中,我有统一组件类:

public class MyAnimator : MonoBehaviour
{
    AnimatorHandler handler;
    public AnimatorHandler Handler => handler;
}

以及 AnimatorHandler 类,例如:

public class AnimatorHandler
{
    public void DoOperation1() { }
    public void DoOperation2() { }
    ... and a lot of more public operations
}

我想让用户通过访问 MyAnimator 类来访问处理程序类的所有 DoOperation1() DoOperation2() 方法。 喜欢:

    void MyUpdate(MyAnimator animator)
    {
        animator.DoOperation1();
    }

而不是

    void MyUpdate( MyAnimator animator )
    {
        animator.Handler.DoOperation1();
    }

或者将所有 AnimatorHandler 方法写入 MyAnimator,这样就不会像:

public void DoOperation1() => handler.DoOperation1();

在这种情况下,我最终会得到额外的 .cs 文件,其中包含大约 1000 行代码,并且每次在 MyAnimator 类中更改某些内容时都需要更新它。

对于这种情况有可能的智能解决方案吗?

也许在获取引用时返回处理程序而不是 MyAnimator 实例?

谢谢你。

c# class unity-game-engine methods
1个回答
0
投票

处理您的情况的一个好方法是使用代理模式。在此模式中,您创建一个代理类,充当中介并直接访问 AnimatorHandler 类的方法。这样,您不需要直接在 MyAnimator 类中复制 AnimatorHandler 的所有方法,而是通过代理访问它们。

这是一个如何实现这一点的简单示例:

public class MyAnimator : MonoBehaviour
{
    private AnimatorHandler handler = new AnimatorHandler();
    public AnimatorHandler Handler => handler;
}

public class AnimatorHandler
{
    public void DoOperation1() { }
    public void DoOperation2() { }
    // Add other methods
}

public class MyAnimatorProxy
{
    private MyAnimator myAnimator;

    public MyAnimatorProxy(MyAnimator animator)
    {
        this.myAnimator = animator;
    }

    public void DoOperation1()
    {
        myAnimator.Handler.DoOperation1();
    }

    public void DoOperation2()
    {
        myAnimator.Handler.DoOperation2();
    }
    // Add other proxy methods
}

// Using the proxy in code
void MyUpdate(MyAnimatorProxy animatorProxy)
{
    animatorProxy.DoOperation1();
}

这种方法创建了一个抽象层,使代码结构保持干净且易于管理,避免了直接从 AnimatorHandler 访问方法的复杂性。

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