as和强制类型转换的区别
之前一直以为as就是强制类型转换,只是as是AS3中新的语法,之前用在有继承关系的对象之间的转换也无甚区别,但是今天却让我领悟到了它俩之间的区别。
原起:今天要给ColorPicker控件动态赋值,它的selectedColor属性接收的是一个uint属性,而我要从另一个对象中拿过来的属性是String的,理所当然的我写了如下的代码:
经过:
var color:uint = str as uint;//str是String类型,大概是这个样子
var color:uint = str as uint;//str是String类型,大概是这个样子
显然,没有效果,跟踪之后,color是null值,于是换成
var color:uint = uint(str);
var color:uint = uint(str);
这样却好使了,好奇的我google了一下,果然有关于我遇到的问题。
文中是这样说的,作者与我遇到了同样的问题,以下是引用内容,转自http://www.cnblogs.com/Longbin/articles/2064004.html:
以前AS中是这样进行强制类型转换的:假设有一个类叫做Class1,我们声明了一个它的对象
c1,如果想要将它转换成Class2类型,只要这样写:
Class2(c1);
在AS3中你依然可以这样写,但是AS3 中提供了一个新的操作符: as ,并且推荐使用as
进行强制转换,上述的例子用 as 操作符实现就是这样:
c1 as Class2;
使用 as 操作符有几个好处:
1.它的效果和第一种方法是一样的。
2.如果类型不兼容无法转换,就会返回null,而不是出错。这样你就可以自定义错误的时候该做什么。
3.没有运行时错误(Run Time Error)提示。
不过有些时候我在使用 as 的时候并不能达到强制转换的目的,在AS3.0类库中最高层类(Top Level classes,所有Top Level
classes的列表)之间进行强制转换时, as 操作符是不起作用的。比如,假如你想要将一个String 类型的字符串 str 转换成
Number 类型的数字 num 时,可能想要这样写:
num = str as Number;
这样写是没有用的,你只能通过第一种方法来达到强制转换的目的:
num = Number(str);
PS:如果我们用as来转换的话,除非MyObj1和MyObj2有继承关系,否则转换将失败,而用强制类型转换则不一定,只要MyObj1类有自定义类型转换函数MyObj2,则可能转换成功,因为强制类型转换针对的是编译时类型,而对于编译时类型o1为object类型,并没有自定义转换为MyObj2的函数.
as和强制类型转换的区别在于,as不会在意是否存在自定义类型转换函数,它针对的时运行时类型,所以as转换成功的可能性只有2者具有同一运行时类型,即2者具有相互继承关系;而强制类型转换会执行自定义转换函数,并且它针对的是编译时类型,所以要注意(2)类似的错误.
还有as不能用于Int(float)等值类型.
我们常用到的foreach用的是强制类型转换,因为它需要能对Int等类型支持.
is的原理与as类似,不过它返回bool类型,is可与强制类型转换搭配使用,可避免转换异常,但最好不要把is和as搭配,实际上is也做了as的转换操作,这样会影响效率.
以上是引用内容。
结论:as和强制类型转换原理是不一样的,前者适用于存在继承关系的对象中,针对的是运行时类型,后者执行自定义转换函数,针对的是编译时类型。
转载于:https://blog.51cto.com/4769069/1215710
as和强制类型转换的区别相关推荐
- As与强制类型转换的区别以及Is运算符的使用
前言: 开发人员经常需要将一个对象从一个类型转换成其他类型. 在c#中,类型转换按照转换方式分类分为了隐式转换和显式转换,按对象分类又分为了值类型转换和引用类型转换 CLR(参考:http://bai ...
- C++中四种强制类型转换的区别
使用标准C++的类型转换符:static_cast.dynamic_cast.reinterpret_cast和const_cast. 1.static_cast 用法:static_cast ...
- c语言不通类型指针转换,C语言之强制类型转换与指针--#define DIR *((volatile unsigned int *) 0x0022)...
强制类型转换形式:(类型说明符) (表达式) 举例说明:1) int a; a = (int)1.9; 2)char *b; int *p; p = (int *) b; //将b的值强制转换为指向整 ...
- C语言里 指针变量强制类型转换,C语言之强制类型转换与指针--#define DIR *((volatile unsigned int *) 0x0022)...
强制类型转换形式:(类型说明符) (表达式) 举例说明:1) int a; a = (int)1.9; 2)char *b; int *p; p = (int *) b; //将b的值强制转换为指向整 ...
- (每日一练)强制类型转换和自动类型转换的区别
自动类型转换就是自发的进行,自动类型转换就相当于把小的水桶里面的水装到大的里面去 比如 int a = 10 double b = a: 强制类型转换是强制性的,将容量大的类型转换到容量小的类型,前提 ...
- C++中的向上类型转换和向下类型转换+四种强制类型转换
转自博客:http://blog.csdn.net/wangweitingaabbcc/article/details/7720979# 在c++的世界中有这样两个概念,向上类型转换,向下类型转换,分 ...
- 栈和托管堆/值类型和引用类型/强制类型转换/装箱和拆箱[C#]
一.栈和托管堆 通用类型系统(CTS)区分两种基本类型:值类型和引用类型.它们之间的根本区别在于它们在内存中的存储方式..NET使用两种不同的物理内存块来存储数据-栈和托管堆.如下图所示: 值 ...
- 隐式转换和显式转换及强制转换的区别
string strType = "123"; object objType= (object)strType;//可以不要,隐式转换, 要的为显式转换 string strTyp ...
- Javascript 强制类型转换函数
1. Boolean(value):把值转换成Boolean类型: 2. Nnumber(value):把值转换成数字(整型或浮点数): 3. String(value):把值转换成字符串. 我们先来 ...
最新文章
- 视频+课件| 视觉引导系列课程
- 在Windows QT下使用ZeroMQ
- 离散数学实验题目-图
- 为子控件添加自定义绘图方式
- 入门机却拥有旗舰级音质体验 Redmi红米8系列音频信息曝光
- Django的MEDIA_ROOT和STATIC_ROOT
- python程序如何执行死刑_「Python基础知识」Python生成器函数
- Char05 Ansible 最佳实践
- 【转】c语言位域操作—_结构体内冒号:的使用
- ffmpeg的简单介绍、用ffmpeg下载blob加工后的视频(m3u8格式)
- Latex 符号(Symbols)
- windows电脑快捷键大全 - 高手总是很酷的
- 判断四张扑克牌能否凑成24点游戏算法
- matlab kmeans 质心,KMeans_SPD_Matrices
- 有线路由器加无线路由器WAN接LAN和LAN接LAN的连线方法
- PCL——简单点云可视化
- 联邦学习纵向逻辑回归公式推导
- 傅里叶变化,短时傅里叶分析,小波变换
- Word段落前面有黑点 Word段落黑点怎么去掉
- 无锡闹市自动驾驶车,打破RoboBus和RoboTaxi边界
热门文章
- 重启计算机后桌面顺序是反的,Win10系统为什么重启电脑之后桌面上的图标排列顺序被打乱该如何处理...
- 6s在c语言中的用法,C语言中assert的用法讲解
- 空格 过滤多个_CAD选择过滤器的运算符如何使用?
- oracle read by other session,AWR报告中,read by other session ,如何解决?
- java select下拉标签_java中下拉框select和单选按钮的回显操作
- android 图片分析,Android图片处理实例分析
- 计算机组成原理实验软件仿真系统_计算机系统组成原理(基础)
- ajax实现上传文件
- 修改Linux启动后的默认颜色,更改linux目录的默认颜色(我选择了Yellow)
- arm linux 中断优先级,ARM中断处理过程