Actionscript 3 在AS3中使用final有什么好处吗?

Actionscript 3 在AS3中使用final有什么好处吗?,actionscript-3,oop,Actionscript 3,Oop,我最近试着养成一种习惯,在任何合乎逻辑的地方使用final关键字,就像任何不应该扩展的类一样 我这样做纯粹是因为我喜欢保持一种严格而简洁的编码风格 除了在为其他方开发应用程序/游戏基础或与其他方合作时的明显优势外,使用final是否有任何实际好处?i、 性能。为了防止类被扩展或方法被重写,我们在该类或方法定义之前加上final属性 它是如何工作的? 期末考试: final public class A { // } 要最终确定方法,请执行以下操作: public class A

我最近试着养成一种习惯,在任何合乎逻辑的地方使用
final
关键字,就像任何不应该扩展的类一样

我这样做纯粹是因为我喜欢保持一种严格而简洁的编码风格


除了在为其他方开发应用程序/游戏基础或与其他方合作时的明显优势外,使用
final
是否有任何实际好处?i、 性能。

为了防止类被扩展或方法被重写,我们在该类或方法定义之前加上final属性

它是如何工作的?
期末考试:

final public class A
{
    //
}
要最终确定方法,请执行以下操作:

public class A     
{
    final public function A
    {
        //
    }
}
在ActionScript中使用final属性有两个原因:

在某些情况下,最终方法的执行速度比非最终方法快。如果您希望以各种可能的方式提高应用程序的性能,请尝试最终确定其方法


作为最终帮助隐藏类的内部细节的方法。将类或方法设为final可以防止其他程序员为了检查类的内部结构而扩展该类或重写该方法。这种预防被认为是保护应用程序不被恶意利用的方法之一。

我在谷歌上或从经验中没有看到任何证据表明,
final
类或方法比非final类或方法运行得更快,即使它们运行得更快,差异也可以忽略不计

我看到它的唯一用途是密封类和停止重写。

根据,final关键字在性能方面没有丝毫差别

在ActionScript中使用
final
的方式并不奇怪:final关键字只标记类和类方法,因此它只影响继承。我看不出调用final方法比调用任何其他方法更快的逻辑原因:运行时仍然需要查找函数指针并执行调用。
同样的道理也适用于中国。但是,在Java中,
final也可以。与在ActionScript中使用相比,这是一个很大的优势,因为它允许编译器“内联”值(即用实际值替换字节码中对变量的所有引用,消除了查找过程),除其他好处外,这可以稍微提高性能。也许我们会在ActionScript的未来版本中看到它的一些用途——这将是一个更好的代码清晰性和防止副作用的好主意


并且由于这些原因,我仍然认为使用<代码>最终< /代码>是很好的做法,即使当您不与其他程序员一起工作时,在<>强>情况下,预期的行为要求方法或类禁止重写< /强>:它阐明意图并防止不期望的效果。因此,它将加快发展,这也不是一件坏事;)

Final
很少使用,而且是合理的。然而,有时建议使用它。正如其他人所说,它可以防止扩展类和/或重写方法。 关于
final
的使用,这里有一些答案,但它们都集中在安全方面:

根据我的经验,使用
final
的唯一真正有用的实例是在创建公共库时,您特别希望防止重写特定方法和/或类的扩展。这与安全性无关,但与行为的封装有关。想一想真正的例子有点困难,但最简单的是以单身为例。如果您创建了一个要作为单例访问的类,那么允许类的用户扩展该类是没有意义的(我知道人们这样做,但他们确实不应该这样做)。而且,这也会让他们陷入痛苦的世界。在这种情况下,将类标记为
final
绝对合适

--编辑

免责声明:出于各种原因,我真的不鼓励使用singleton模式:

  • 它否定了多态性

  • 它不允许继承

  • 它违反了SRP


  • 但由于这是一种非常流行的模式,我不妨尝试鼓励人们使用关键字
    final

    使其更安全一些,因为一年后,这是一个重要的更新--

    ActionScript Compiler 2.0在某些条件下增加了对函数内联的支持,其中之一是函数是
    静态的
    最终的
    。见:


    还要注意,如果要使用内联,则必须使用
    [inline]
    元数据标记修饰函数,并使用
    -inline
    编译器参数。

    如果逐字引用ad,请添加源代码:嘿嘿。。。显然,该网站也没有引用其来源。原文来自O'Reilly的Essential ActionScript 3.0抱歉没有添加源代码。忘记添加!万岁,我们终于在一个性能主题上达成一致,甚至没有进行讨论!:)我同意你的最后一点,人们似乎从来没有考虑过快速而无痛的发展的意义,只是到处乱扔乱码,而没有整理它。如果不是出于工艺的骄傲(正如Bob Martin叔叔所说),保持代码的干净性和可读性应该仅仅是出于实用的原因——否则,如果你以后不得不回头看,你总是要投入十倍的时间。在AS3中,“将变量标记为不可变”你称它们为常量,非变量,即公共常数myPi:Number=1.14;类和函数的Final有时会加快代码的速度,尤其是在为移动设备编译时。但是
    final
    让事情变得更快。。。好吧,你真的必须为此提供一些数据。
    final