`
piperzero
  • 浏览: 3481063 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

as和强制类型转换的区别

 
阅读更多

之前一直以为as就是强制类型转换,只是as是AS3中新的语法,之前用在有继承关系的对象之间的转换也无甚区别,但是今天却让我领悟到了它俩之间的区别。

原起:今天要给ColorPicker控件动态赋值,它的selectedColor属性接收的是一个uint属性,而我要从另一个对象中拿过来的属性是String的,理所当然的我写了如下的代码:

经过:

var color:uint = str as uint;//str是String类型,大概是这个样子
显然,没有效果,跟踪之后,color是null值,于是换成

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和强制类型转换原理是不一样的,前者适用于存在继承关系的对象中,针对的是运行时类型,后者执行自定义转换函数,针对的是编译时类型。

分享到:
评论

相关推荐

    SQL SERVER中强制类型转换cast和convert的区别详解

    SQL SERVER中强制类型转换cast和convert的区别 在SQL SERVER中,cast和convert函数都可用于类型转换,其功能是相同的, 只是语法不同. cast一般更容易使用,convert的优点是可以格式化日期和数值. select CAST('123' as...

    pandas 强制类型转换 df.astype实例

    主要介绍了pandas 强制类型转换 df.astype实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    php foreach 参数强制类型转换的问题

    所以,为了防止这样的信息出现,我使用foreach的时候,都会把参数进行强制类型转换,形势如下: foreach((array)$arr as $key => $value); 这样做一直相安无事,就在前几天,突然出现了问题。我强制类型转换以后不能...

    Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍

    下面就来详细说一说 Javascript 中 Boolean、Nnumber、String 强制类型转换的区别。 我们知道 Boolean(value) 是把值转换成Boolean类型,Nnumber(value) 是把值转换成数字(整型或浮点数),而 String(value) 是把值...

    提高C#编程水平的50个要点

    3.在 as 和 强制类型转换之间,优先使用 as 操作符 4.使用条件属性 (Conditional Attributes) 来代替条件编译语句 #if 5.总是为自定义类重载 ToString 方法 6.区别值类型和引用类型 7.使用不可变的值类型(Immutable...

    robotframework类型强制转换.pdf

    robotframework类型强制转换 类型强制转换 在测试过程中需要⽐较两个数值是否存在⼀定的关系 1.若新增⼀个数据,删除⼀个数据,判断他是否新增成功或者删除成功,除了判断本⾝数据成功显⽰与不显⽰之外,可以通过...

    调高C#编程的50个基本技巧

    在 as 和 强制类型转换之间,优先使用 as 操作符 4.使用条件属性 (Conditional Attributes) 来代替条件编译语句 #if 5.总是为自定义类重载 ToString 方法 6.区别值类型和引用类型 7.使用不可变的值类型...

    Javascript 强制类型转换函数

    1. Boolean(value):把值转换成Boolean类型; 2. Nnumber(value):把值转换成数字(整型或浮点数); 3. String(value):把值转换成字符串。 我们先来看Boolean():在要转换的值为“至少有一字符的字符串”、“非0的...

    c# 使用模式匹配以及 is 和 as 运算符安全地进行强制转换

    C# 还提供 is 和 as 运算符来测试值是否属于特定类型。 下面的示例演示如何使用模式匹配 is 语句: class Animal { public void Eat() { Console.WriteLine("Eating."); } public override string ToString() {...

    .net中as和is之间的区别分析

    用于在兼容的引用类型之间执行转换,as 运算符类似于强制转换操作;但是,如果转换不可行,as 会返回 null 而不是引发异常。更严格地说,这种形式的表达式:expression as type,等效于expression is type ? (type)...

    C#中使用强制类型实现字符串和ASCII码之间的转换

    C#貌似没有专门用于ASCII码转字符或字符转ASCII码的系统函数,所以小编这里就借用一下强制类型转换来实现ASCII码与字符之间的互转。 所谓的ASCII码,即American Standard Code for Information Interchange,美国...

    详解Javascript数据类型的转换规则

    一、数据类型 5种基本数据类型:Null/Undefined/String/Boolean/Number 1种复杂数据类型:Object 二、数据类型检测 传送门《JS中检测数据类型的几种方式及优缺点小结》 ...1、强制类型转换 在了解隐式转换的规则前

    C#中AS和IS关键字的用法

    在程序中,进行类型转换是常见的事,C#支持基本的强制类型转换方法,例如: Object obj1 = new NewType(); NewType newValue = (NewType)obj1; 这样强制转换的时候,这个过程是不安全的,因此需要用try-catch语句...

    提高CS编程水平的50个要点

    提高CS编程水平的50个要点 ...3.在 as 和 强制类型转换之间,优先使用 as 操作符 4.使用条件属性 (Conditional Attributes) 来代替条件编译语句 #if 5.总是为自定义类重载 ToString 方法 6.区别值类型和引用类型

    总结Javascript中的隐式类型转换

    比如像是Number() ,还是parseInt() 、parseFloat()都属于显示类型转换(强制类型转换); 这一节我们来看一下隐式类型转换(自动转换)。 数值自动转换为字符串 var a = 123; alert(a+'456'); // 输出 ...

    提高C#编程水平的50个技巧

    提高C#编程水平的50个技巧 ...3.在 as 和 强制类型转换之间,优先使用 as 操作符 4.使用条件属性 (Conditional Attributes) 来代替条件编译语句 #if 5.总是为自定义类重载 ToString 方法 ......

Global site tag (gtag.js) - Google Analytics