您好我正在使用Unity 3D与lidgren建立自己的网络。
当我为我制作一个定制gui时,我也遇到过这个问题,但这并不是什么大问题。对其他开发人员的一个小小警告几乎没有帮助。
但这次我需要更好的解决方案。
假设我有一个BaseClass和一个孩子:
public class BaseClass : MonoBehavior {
void Update() {
//my connectionhandler
}
}
public class Child : BaseClass {
// forbid it to define Update
void Update() {
}
// or let him use it but without writing base.Update() it should still use BaseClass Update()
}
正如你在两个课程中看到的那样,我有无效的Update()。问题是如果孩子也使用void Update,那么基本更新不再被调用。有可能避免它。如果基础已定义,示例限制对Update方法的访问? 或者可以让孩子使用void Update()的定义,但是baseclass也应该能够使用他自己的Update()(后台工作:P)
其他开发人员不应每次使用base.Update()。我相信他们会多次忘记这一点:)
答案 0 :(得分:0)
您正在寻找sealed
关键字,这会阻止进一步派生的类覆盖virtual
方法。
答案 1 :(得分:0)
这很丑,但你可以通过运行时检查来处理它。实现它只会在调试版本上运行,但这应该意味着如果开发人员至少运行自己的代码,他们会收到错误。
public class BaseClass : MonoBehavior {
void Update() {
//my connectionhandler
}
public BaseClass() {
Debug.Assert(!OverridesUpdateMethod(), "Do not override Update()!");
}
[Debug]
private bool OverridesUpdateMethod() {
return GetType() != typeof(BaseClass) &&
GetType().GetMethod("Update", BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) != null;
}
}