我有两个班级
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.从GameManager派生的类,例如ShooterGameManager。我可以用
创建ShooterGameManagerpublic class ShooterGameManager : GameManager
{}
但是Instance仍然是GameManager !!! 我尝试过用类通用类添加额外的类定义。
public class GameManager<T> : Singleton<T> where T : Component
{}
但是这次有两个完全不同的类可用,没有从GameManager继承。 我该怎么做???
答案 0 :(得分: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; } }
}
完成。使基类成为单例会使您感到痛苦并使您无需键入两行代码。派生类是否是单例是该派生类的实现细节;不要强迫你的派生类作者。
答案 1 :(得分:1)
您可以像这样创建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>
{
}