我有一个抽象类,应该由各种其他类继承,并使用GameObject
方法附加到Attach
,因为它做了一些初始化工作(在示例中删除)为简单起见)。
public abstract class GameBehaviour : MonoBehaviour
{
private bool initialized = false;
public void Initialize(GameState gameState)
{
initialized = true;
}
public static T Attach<T>(GameObject parent, GameState gameState) where T : GameBehaviour
{
T behaviour = parent.AddComponent<T>();
behaviour.Initialize(gameState);
return behaviour;
}
}
然后我有另一个名为WorldManager
和WorldRenderer
的类,它们都继承了抽象的GameBehaviour
类。
To&#34;初始化&#34;这些类的对象我使用以下代码:
WorldManager manager = WorldManager.Attach<WorldManager>(gameObject, this);
WorldRenderer renderer = WorldRenderer.Attach<WorldRenderer>(gameObject, this);
现在,显然<WorldManager>
和<WorldRenderer>
感到多余。我的问题是,是否可以将Attach
方法更改为不需要泛型类型,而是使用它的继承者类型,如果这有意义的话。可能有一些我忘记或不知道的C#概念。
非常感谢任何反馈。
答案 0 :(得分:2)
我认为你可以使GameBehaviour
类通用而不是方法。显然,结果是你不能使用Attach
方法来附加其他类型。
通用约束使你看起来像是在圈子里,但C#打字系统允许这样就好了。
public abstract class GameBehaviour : MonoBehaviour {
private bool initialized = false;
public void Initialize(GameState gameState)
{
initialized = true;
}
}
public abstract class GameBehaviour<T> : GameBehaviour where T: GameBehaviour<T>
{
public static T Attach(GameObject parent, GameState gameState)
{
T behaviour = parent.AddComponent<T>();
behaviour.Initialize(gameState);
return behaviour;
}
}
public class WorldManager: GameBehaviour<WorldManager> { ... }
public class WorldRenderer: GameBehaviour<WorldRenderer> { ... }
用法:
WorldManager manager = WorldManager.Attach(gameObject, this);
WorldRenderer renderer = WorldRenderer.Attach(gameObject, this);