在C#中使用嵌套的通用类时的inheritance问题

我正在尝试创建一个类层次结构,以便我可以:

SpecificScreenController <ScreenController <Singleton

到目前为止,我将这些设置为:

public abstract class Singleton : MonoBehaviour where T : MonoBehaviour { private static T _instance; public static T Instance{ get{... return _instance;} } } public abstract class ScreenController : Singleton where T : MonoBehaviour { public GAME_SCREEN GameScreen; //many more ScreenController common properties/fields/methods } public class SpecificScreenController : ScreenController { //subclass specific properties, overriden ScreenController methods etc. } 

这样我可以使用SpecificScreenController.Instance.GameScreen; 到目前为止,这项工作非常好。

我现在要做的是,例如:

 List screenControllers = new List(); screenControllers.Add(SpecificScreenController.Instance); ScreenController s = screenControllers.Find(i => i.GameScreen == GAME_SCREEN.THING); 

但是,当然……这将无法编译,因为ScreenController现在需要一个Generic Type等。我可以/应该使用什么成语来保存Singleton行为和ScreenController子/超类?

这里的问题是协方差。 您假设如果SpecificScreenControllerinheritance自MonoBehaviourScreenController也inheritance自ScreenController 。 它没有。 你不能做这个演员。

由于似乎没有真正干净的解决方案,我最终从我的类层次结构中删除了Singleton,并将单例属性get / instantiate代码的复制粘贴非generics版本复制到我想成为单例的每个类中。

 public abstract class ScreenController : MonoBehaviour { } public class SpecificScreenController : ScreenController { private static SpecificScreenController _instance; public static SpecificScreenController Instance{ get{... return _instance;} }