两次继承自泛型类

bil*_*kan 0 c# singleton instance generic-programming unity-game-engine

我有两节课

public class Singleton<T> : MonoBehaviour   where T : Component
{
    protected static T _instance;


    public static T Instance
    {
        get
        {
            return _instance;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

public class GameManager : Singleton<GameManager>
{
    // Lots of Methods and Properties...
}
Run Code Online (Sandbox Code Playgroud)

我想创建3.从GameManager派生的类,例如ShooterGameManager.我可以创建ShooterGameManager

public class ShooterGameManager : GameManager
{}
Run Code Online (Sandbox Code Playgroud)

但是实例仍然是GameManager !!!,我尝试过用类通用类添加额外的类定义.

public class GameManager<T> : Singleton<T> where T : Component
{}
Run Code Online (Sandbox Code Playgroud)

但是这次有两个完全不同的类可用,没有从GameManager继承.我该怎么办 ???

Eri*_*ert 8

我该怎么办 ???

你应该彻底删除Singleton基类,忘记你曾经写过这样的东西.它没有任何帮助,会让你感到痛苦,所以你为什么要使用它?

然后写:

abstract public class GameManager : MonoBehaviour
{
    protected GameManager() { whatever }
    // Lots of Methods and Properties...
}

public sealed class ShooterGameManager : GameManager
{
  private ShooterGameManager() { whatever } 
  private static ShooterGameManager instance = new ShooterGameManager();
  public static ShooterGameManager Instance { get { return instance; } }
}
Run Code Online (Sandbox Code Playgroud)

完成.使基类成为单例会使您感到痛苦并使您无需键入两行代码.派生类是否是单例是该派生类的实现细节; 不要强迫你的派生类作者.