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继承.我该怎么办 ???
我该怎么办 ???
你应该彻底删除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)
完成.使基类成为单例会使您感到痛苦并使您无需键入两行代码.派生类是否是单例是该派生类的实现细节; 不要强迫你的派生类作者.