可以禁止子类定义一个类吗?

时间:2015-08-28 21:50:26

标签: c# class inheritance restriction

您好我正在使用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()。我相信他们会多次忘记这一点:)

2 个答案:

答案 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;
    }
}