gpt4 book ai didi

c# - 泛型的循环依赖

转载 作者:行者123 更新时间:2023-11-30 12:36:38 28 4
gpt4 key购买 nike

我定义了以下接口(interface):

public interface IStateSpace<State, Action>
where State : IState
where Action : IAction<State, Action> // <-- this is the line that bothers me
{
void SetValueAt(State state, Action action);
Action GetValueAt(State state);
}

基本上,IStateSpace 界面应该类似于棋盘,在棋盘的每个位置上您都有一组可能的移动。此处的这些移动称为 IAction。我以这种方式定义了这个接口(interface),因此我可以适应不同的实现:然后我可以定义实现 2D 矩阵、3D 矩阵、图形等的具体类。

public interface IAction<State, Action> {
IStateSpace<State, Action> StateSpace { get; }
}

IAction,将向上移动(这是,如果在 (2, 2) 移动到 (2, 1) ), 向下移动等现在,我希望每个操作都可以访问 StateSpace,以便它可以执行一些检查逻辑。这个实现是否正确?或者这是循环依赖的坏情况?如果是,如何以不同的方式完成“相同”?

谢谢

最佳答案

您指出的循环引用不是问题。为了编译代码,您需要修改 IAction 接口(interface)定义:

public interface IAction<State, Action>
where State : IState
where Action: IAction<State, Action>
{
IStateSpace<State, Action> StateSpace { get; }
}

循环引用怎么样:) 通常编译器会使用占位符来处理它们。在通用类型约束的情况下,这可能甚至没有必要。一个小提示:如果您在不在同一个程序集中的类之间定义循环引用,就会成为一个问题。

关于c# - 泛型的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2878029/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com