微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#中的“朋友”类和状态模式

如何解决C#中的“朋友”类和状态模式

我试图在 C# 中实现状态模式,我做了这样的事情:

class Context {
    private State state = null;
    private State concreteState1 = null;
    private State concreteState2 = null;

    public Context(State state) {
        concreteState1 = new ConcreteState1(this);
        ChangeStateto(concreteState1);
    }

    public void ChangeStateto(State state_) {
        state = state_;
    }

    public void DoSomething() {
        state.DoSomething();
    }

    public void DoSomethingElse() {
        state.DoSomethingElse();
    }
}
    
abstract class State {
    protected Context context;

    public void Context(Context context_) {
        context = context_;
    }

    public abstract void DoSomething();

    public abstract void DoSomethingElse();
}

这里,ConcreteState1ConcreteState2State 的实现,为了简洁我省略了它们。我遇到的问题是 Context 有一些成员,我希望所有实现 State 的类都可以访问这些成员;我认为这在模式的上下文中是有道理的,因为这个想法是让上下文根据其状态“好像”它是一个不同的类,为此,状态能够访问它的内部结构。

在 C++ 中,我可能会通过将 State 设置为 friendContext 类来对此进行编码,但是由于 C# 没有类似于 friend 的任何东西,我'我不知道在这里做什么。我真的不想为这个特定的有限状态机创建一个程序集并将所有代码放在那里。我也不想要 Context 的私有成员的公共设置器,因为我不希望其他类修改上下文。有没有其他好的替代方法可以让我保持我的 ContextConcreteState 类不同,但使 Context 的内部结构仅对 State 可用?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。