摘自 O'Reilly's 第 113 页基本 ActionScript 3.0 (2007):
最终方法有助于隐藏类的内部细节。制作一个类或一个
方法final阻止其他程序员扩展类或重写
用于检查类内部结构的方法。这样的预防
被认为是方法之一保护应用程序不被
被恶意利用.
这是指使用已编译、闭源包的 API 并“恶意利用”来学习有关类设计的内容的用户吗?这真的是个问题吗?
对于更多上下文,这是使用的两个原因中的第二个final
。在2007年版中,它位于章节的第113页遗产在副标题下防止类被扩展和方法被覆盖.
在 ActionScript 中使用 Final 属性有两个原因:
在许多语言中,重写方法是从基类中选择加入的。通常,它是virtual
关键字允许基类作者选择覆盖的可能性。
然而,在 AS3 中,重写方法的能力是选择退出的。这就是final
关键字确实如此。它允许基类作者说“这个方法可能不会被重写”。
有一些关于封装的老派想法表明 AS3 这样做会带来安全问题。但这主要是在公共 API 的情况下,您希望隐藏内容但公开功能。
但是,在更现代的时代,我们了解到反汇编和反射将允许恶意开发人员做任何他/她想做的事情,所以今天这不再是一个问题。依靠final
在我看来,安全是一个拐杖,任何有关它的建议都应该被驳回。安全性需要比这更仔细地考虑。 API 需要进行架构设计,以便开发人员可以执行需要执行的操作,但安全关键信息不应包含在公共 API 中。
这并不是说final
没有用。final
告诉从您的类派生的开发人员您从未打算让他们重写该函数。它让你说“请只调用这个函数。不要覆盖。”在我看来,它更像是一种接口或通信机制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)