То, что делает виртуальное ключевое слово в actionscript, делает?

Я нашел некоторый код, который использует virtual ключевое слово для функций, как:

package tryOut{
    public class Parent {

        public function Parent() {}

        public function foo():void{
            trace("Parent foo");
        }//foo

        public virtual function bar():void{
            trace("Parent virtual bar");
        }//bar      
    }//class
}//package

Насколько я понимаю использование virtual ключевое слово должно изменить способ переопределить работы метода, или способ использовать дочерний метод работал бы, или что-то. Но кажется, что это не делает ничего вообще. Наличие расширения:

package tryOut {
    public class Child extends Parent {
        public function Child() {}

        public override function foo():void {
            trace("Child foo");
        }//foo

        public override function bar():void {
            trace("Child virtual bar");
        }//bar

    }//class
}//package

Следующая печать кода:

var parent:Parent = new Parent();
var child:Child = new Child();

parent.foo(); //Parent foo
child.foo(); //Child foo
parent.bar(); //Parent virtual bar
child.bar(); //Child virtual bar

var childCast:Parent = child as Parent;

parent.foo(); //Parent foo
childCast.foo(); //Child foo
parent.bar(); //Parent virtual bar
childCast.bar(); //Child virtual bar

Таким образом, оба метода работают тот же относительно переопределения. Делает virtual ключевое слово изменяет что-то, что я пропускаю?

9
задан LopSae 12 February 2010 в 00:34
поделиться

2 ответа

>>> from itertools import groupby
>>> from operator import itemgetter
>>> L=[('grape', 100), ('grape', 3), ('apple', 15), ('apple', 10), ('apple', 4), ('banana', 3)]
>>> [(x,sum(map(itemgetter(1),y))) for x,y in groupby(L, itemgetter(0))]
[('grape', 103), ('apple', 29), ('banana', 3)]
-121--2111431-
  1. Дело в том, чтобы иметь дело с проблемами производительности, в общем, не развлекать их, потому что делать это - это догадываться , что они являются проблемой, потому что если вы не знаете они, вы догадываетесь, и угадывание является центральным понятием «преждевременной оптимизации». Проблема в производительности заключается в том, что если они имеются , а не раньше , их диагностируют. Проблемы - это почти никогда не то, о чем вы бы догадались. Вот расширенный пример.

  2. Если вы сделаете это достаточно, вы поймете подходы к проектированию, которые, как правило, вызывают проблемы с производительностью, будь то в коде или в библиотеке. (У библиотек могут быть проблемы с производительностью.) Когда вы узнаете это и примените его к проектам тогда в некотором смысле , вы преждевременно оптимизируете, но это в любом случае имеет желаемый эффект, чтобы избежать проблем. Если я могу подытожить то, что вы, вероятно, узнаете, это то, что слишком много уровней абстракции, и чрезмерные иерархии классов (особенно те, которые полны обновления в стиле уведомления) очень часто являются причинами проблем производительности.

В то же время я разделяю вашу осмотрительность в отношении сторонних библиотек и подобных. Слишком много раз я работал над проектами, где был какой-то сторонний пакет «leveraged» для «синергии», а затем поставщик либо поднялся в дыму, либо отказался от продукта или устарел, потому что Microsoft изменила вещи в OS. Тогда наш продукт, который сильно опирался на сторонний пакет начинает не работать, требуя больших расходов с нашей стороны, в то время как оригинальные программисты давно ушли.

-121--110â3-

Из справочных документов (Если вы используете Flash, выполните поиск «virtual»):

Также существует несколько идентификаторов которые иногда называются будущие зарезервированные слова. Они идентификаторы не зарезервированы ActionScript 3.0, хотя некоторые из них может рассматриваться как ключевые слова программным обеспечением включает ActionScript 3.0. Вы можете использовать многие из них идентификаторы в коде, но Adobe рекомендует не использовать их потому что они могут отображаться как ключевые слова в последующая версия языка.

abstract boolean byte cast

char debugger double enum

export float goto intrinsic

long prototype short synchronized

throws to transient type

virtual volatile

Таким образом, в AS3, виртуальный не делает абсолютно ничего.

17
ответ дан 4 December 2019 в 11:41
поделиться

Таким образом, оба метода работают одинаково в отношении переопределения.

Что заставляет вас так думать? Показанные вами тесты несопоставимы.

childCast типизирован как Parent , но вы все равно вызываете функцию в Child .

Вы не проверяете ту же ситуацию для невиртуального метода.

1
ответ дан 4 December 2019 в 11:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: