[英]Abstract class, use type of inheritor in generic method
我有一个抽象类,应该由其他各种类继承,并使用Attach
方法Attach
其附加到GameObject
,因为它完成了一些初始化工作(为简单起见在示例中已删除) 。
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
类。
为了“初始化”这些类的对象,我使用以下代码:
WorldManager manager = WorldManager.Attach<WorldManager>(gameObject, this);
WorldRenderer renderer = WorldRenderer.Attach<WorldRenderer>(gameObject, this);
现在,显然, <WorldManager>
和<WorldRenderer>
感到多余。 我的问题是,是否有可能Attach
方法更改为不需要泛型类型,而是使用其继承者的类型,如果有意义的话。 可能有些C#概念我遗忘了或不知道。
任何反馈将不胜感激。
我认为您可以使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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.