两次继承自泛型 class

Two times inherited from a generic class

我有两个class

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


    public static T Instance
    {
        get
        {
            return _instance;
        }
    }
}

public class GameManager : Singleton<GameManager>
{
    // Lots of Methods and Properties...
}

我想创建 3。class 从 GameManager 派生,例如 ShooterGameManager。我可以用

创建 ShooterGameManager
public class ShooterGameManager : GameManager
{}

但实例仍然是 GameManager!!!, 我尝试使用通用 class.

添加额外的 class 定义
public class GameManager<T> : Singleton<T> where T : Component
{}

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

您可以像这样创建 GameManager

public GameManger<T> : Singleton<T>
{}

然后你可以创建 GameManger

public GameManager : GameManager<GameManger>
{}

和 ShooterGameManager

public ShooterGameManager : GameManager<ShooterGameManager>
{}

并重复您需要创建的其他两种类型

下面的示例证明了这一点

public class Program
{
    public static void Main()
    {
        new GameManager(); //Prints GameManager
        new ShooterGameManager(); //prints ShooterGameManager
    }


}

public class Singleton<T>
{
    private T _instance;

    public Singleton()
    {
        Console.WriteLine(typeof(T).Name);
    }
}

public class GameManager<T> : Singleton<T>
{
}

public class GameManager : GameManager<GameManager>
{
}

public class ShooterGameManager : GameManager<ShooterGameManager>
{
}

What should I do ???

你应该彻底删除 Singleton 基础 class 并忘记你曾经写过这样的东西。它没有任何帮助,还会给您带来痛苦,那么您为什么要使用它?

然后写:

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; } }
}

完成。使基础 class 成为单例会让您感到痛苦,并且可以避免您只输入两行代码。派生的 class 是否是单例是该派生的 class 的实现细节;不要将其强加给您派生的 class 作者。