两次继承自泛型 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 作者。
我有两个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。我可以用
创建 ShooterGameManagerpublic 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 作者。