литье типа flex3
-
05-07-2019 - |
Вопрос
Кто-нибудь знает реальную разницу между двумя способами приведения типов во Flex 3?
var myObject1:MyObject = variable as MyObject;
var myObject2:MyObject = MyObject(variable);
Я предпочитаю использовать второй метод, потому что он выдает ошибку при неудачном приведении типа, тогда как первый метод просто возвращает ноль.Но есть ли еще отличия?Возможно, есть какие-то преимущества в использовании первого метода?
Решение
Второй тип приведения имеет другое поведение для верхнего уровня ( http: //livedocs.adobe .com / flex / 2 / langref / ), например Array (obj) не является прямым способом, который вы описываете; по возможности он создает новый массив из obj, даже если obj является массивом. Р>
Я уверен, что случаи, когда это приведет к неожиданному поведению, будут редкими, но я всегда использую " как " по этой причине. Это значит, что если я сделаю
int(str)
Я знаю, что это актерский состав в " попытке конвертировать " смысл слова не в "Я обещаю, что это" чувство.
ref: получил подтверждение от http : //raghuonflex.wordpress.com/2007/07/27/casting-vs-the-as-operator/
Другие советы
- А
as
метод возвращаетnull
если приведение не удалось. - А
()
метод выдает и выдает ошибку, если приведение завершается неудачей.
Если значение variable
не совместим с MyObject
, myObject1
будет содержать null
и вы будете удивлены null
ошибка указателя (1009:не может получить доступ к свойству или методу нулевой ссылки на объект.) где-то позже в программе, когда вы попытаетесь получить к нему доступ.Где, как если бы вы проводили кастинг с использованием MyObject(variable)
синтаксиса, вы получите ошибку приведения типа (1034 :Приведение типа не удалось:не могу преобразовать _ в _) на той же самой строке, что более полезно, чем где-то позже получить 1009 и задаваться вопросом, что пошло не так.
Мне кажется, я где-то читал на этом сайте, что as
немного быстрее, чем ()
, но я не могу найти вопрос снова.
Помимо того, что этот вопрос задавался много раз, вы найдете более подробный ответ .
Недавно я обнаружил очень полезный тег []
при поиске в StackOverflow, он позволяет выполнять поиск только в вопросах, помеченных указанными тегами. Таким образом, вы можете выполнить поиск, например [actionscript-3], как против приведения , Дополнительные советы по поиску можно найти здесь: https://stackoverflow.com/search .
И нет; ирония в том, что я не могу найти вопрос о производительности и написать о том, как поиск не теряется на меня;)
Я думаю, что as возвращает базовый класс, а не null, когда приведение не удается и () выдает ошибку.