литье по типу flex3 - PullRequest
       12

литье по типу flex3

4 голосов
/ 26 ноября 2009

Кто-нибудь знает реальную разницу между двумя способами приведения типов в Flex 3?

var myObject1:MyObject = variable as MyObject;
var myObject2:MyObject = MyObject(variable);

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

Ответы [ 4 ]

5 голосов
/ 27 ноября 2009

Второй тип приведения имеет другое поведение для типов верхнего уровня (http://livedocs.adobe.com/flex/2/langref/)), например, Array (obj) не приводит к прямому описанию, как вы описали, он создает новый Array, если это возможно, из obj, даже если obj - это массив.

Я уверен, что времена, когда это приведет к неожиданному поведению, будут редкими, но я всегда использую «как» по этой причине. Это значит, что если я сделаю

int(str) 

Я знаю, что это приведение в смысле слова "попытка преобразовать", а не в смысле "я обещаю, что это так".

ref: получил подтверждение от http://raghuonflex.wordpress.com/2007/07/27/casting-vs-the-as-operator/

2 голосов
/ 26 ноября 2009
  • Метод as возвращает null в случае неудачного приведения.
  • Метод () выбрасывает и выдает ошибку в случае неудачного приведения.

Если значение variable несовместимо с MyObject, myObject1 будет содержать null, и вы будете удивлены ошибкой указателя null ( 1009: невозможно получить доступ к свойству или методу нулевой ссылки на объект. ) где-то позже в программе, когда вы пытаетесь получить к нему доступ. Где, как будто вы используете приведение с использованием синтаксиса MyObject(variable), вы получите ошибку приведения типов ( 1034: сбой приведения типов: невозможно преобразовать _ в _ ) в той же самой строке, что более полезно, чем где-то позже получаю 1009 и задаюсь вопросом, что пошло не так.

1 голос
/ 27 ноября 2009

Мне кажется, я где-то читал на этом сайте, что as немного быстрее, чем (), но я не могу найти вопрос снова.

Помимо того, что этот вопрос задавался много раз, вы найдете более подробный ответ здесь .

Недавно я обнаружил очень полезный тег [] при поиске в StackOverflow, он позволяет выполнять поиск только в вопросах, помеченных указанными тегами. Таким образом, вы можете выполнить поиск, подобный [actionscript-3], как и приведение . Здесь есть и другие советы по поиску: https://stackoverflow.com/search.

и нет; ирония в том, что я не могу найти вопрос о производительности и написать о том, как поиск не теряется на меня;)

0 голосов
/ 28 марта 2012

Я думаю, что as возвращает базовый класс, а не null, когда приведение не удается и () выдает ошибку.

...