也许这不是最准确的标题,但有点难以描述;也许你们能在这里帮我吗? 我正在使用MVC格式编写一款游戏,并且我希望每个基类(控制器,模型和视图)都有一个对它们相应特征的引用,形成一种三角形式(例如,模型具有对定义它的控制器的引用,以及对引用它的视图等)。 这些类的大部分看起来像这样:
正如您所看到的,在基类中这很快变得混乱。我不知道要为(参考上面的示例)试图定义约束的"Model"放置什么符号。将"Model"放入问号中似乎也无法编译,因为我遇到了一个可怕的装箱转换问题。
有没有办法实现我想要的效果,还是我只是在尝试过于聪明?如果这能够奏效,我很想能够声明子类类型受限于它们的“三角形”,因此我可以避免不必要的转换或帮助方法:
public class Model {
public Controller controller;
public View view;
public void Connect (Controller controller, View view) {
this.controller = controller;
this.view = view;
}
}
这样做是可以的,但是每当我打算调用ChildModel的控制器时,我都需要将其转换为适当的ChildController以获取正确的版本。我可以创建一个实用程序方法/ getter来获取适当的转换项,但我不想为每个子类重新编写此代码段。我认为通过使基类成为通用类,可以解决这个问题,但现在我遇到了一个新问题,即新的通用类需要引用试图定义它们的类,因此:
public class Model<V, C> where V : View<?, C> where C : Controller<?, V> {
public Controller<?, V> controller;
public View<?, C> view;
public void Connect (Controller<?, V> controller, View<?, C> view) {
this.controller = controller;
this.view = view;
}
}
正如您所看到的,在基类中这很快变得混乱。我不知道要为(参考上面的示例)试图定义约束的"Model"放置什么符号。将"Model"放入问号中似乎也无法编译,因为我遇到了一个可怕的装箱转换问题。
有没有办法实现我想要的效果,还是我只是在尝试过于聪明?如果这能够奏效,我很想能够声明子类类型受限于它们的“三角形”,因此我可以避免不必要的转换或帮助方法:
public class ChildModel<ChildView, ChildController> {
public ChildModel () {
this.controller <- calls ChildController type, not base type!
}
}
有人有任何想法吗?
(这段文本已翻译)