1   概述

1.1  了解相关基本概念

a.隐式转换:对于值类型,低精度=>高精度。eg:int=>long;对于引用类型,子类向祖宗类转换过程。eg:对象=>Object。

b.显示转换:显示转换是隐式转换的逆过程。

c.拆箱与装箱。

d.GetType获取对象类型( System.Object.ReferenceEquals(Object obj1,Object obj2)) 。

e.基本类型:Convert类。

f.Parse()

g.ToString()

1.2  为什么要用is和as

在类型转换时,对于事先并不知对象的具体类型时,为了避免转换失败造成系统崩溃问题,我们一般在容易出现问题或者有可能出现问题(当时并不能确定是否会发生异常)的地方,用try......catch.....finally....来规避程序崩溃等问题,当然这样做也方便测试,这就是is和as的功能之一,除此之外,对系统进行性能优化时,能不用try....catch....就尽量不用,is和as满足这一原则。

2   示例

2.1  is用法

is判断某个对象是否兼容另一个对象。永远不会抛出异常。其返回值类型为布尔类型,若兼容,则返回true;若不兼容,则为false;若对象为空null,则为false。一般结构如下:

 if (A is B)//第一次兼容检查
{
B b=(B)A;//第二次兼容检查
}A 分析:对于is,CLR会进行2次兼容性检查,第一次判断A is B,若为真,则再次进行兼容检查B b=(B)A;

例1:兼容

 Label lbl = new Label();
if (lbl is Object)
{
Object objLbl = (Object)lbl;
Response.Write("true");
}
else
{
Response.Write("false");
} 测试结果为:true

例2:不兼容

 Label lbl = new Label();
if (lbl is TextBox)
{
Response.Write("true");
}
else
{
Response.Write("false");
}
测试结果为:false

例3:对象为NULL

 Label lbl = null;
if (lbl is Object)
{
Response.Write("true");
}
else
{
Response.Write("false");
}
测试结果:false

2.2   as用法 

as判断某个对象是否兼容另一个对象。永远不会抛出异常,若兼容,则返回结果;若不兼容,则返回null;若为空,则返回null。

例1:兼容

 Label lbl1 = new Label();
Label lbl2 =lbl1 as Label;
Response.Write(lbl2);//System.Web.UI.WebControls.Label

例2:不兼容

 string str = "AS转换";
Label lbl = str as Label;//显示编译错误
Response.Write(lbl);

例3: 对象为NULL

 Object obj = null;
Label lbl = obj as Label;
Response.Write(lbl);//null

2.3   is和as比较  

由于CLR对is会进行两次检查,对as只进行一次检查,故as效率要高一些,一般情况下,使用as而不使用is.

3   参考文献

【01】 http://developer.51cto.com/art/200908/145432.htm;http://developer.51cto.com/art/200908/145432.htm

4   版权

  • 感谢您的阅读,若有不足之处,欢迎指教,共同学习、共同进步。
  • 博主网址:http://www.cnblogs.com/wangjiming/。
  • 极少部分文章利用读书、参考、引用、抄袭、复制和粘贴等多种方式整合而成的,大部分为原创。
  • 如您喜欢,麻烦推荐一下;如您有新想法,欢迎提出,邮箱:2016177728@qq.com。
  • 可以转载该博客,但必须著名博客来源。

随机推荐

  1. JSON.parse()和JSON.stringify()

    1.parse 用于从一个字符串中解析出json 对象.例如 var str='{"name":"cpf","age":"23&q ...

  2. CSS3 3D立方体效果-transform也不过如此

    CSS3系列已经学习了一段时间了,第一篇文章写了一些css3的奇技淫巧,原文戳这里,还获得了较多网友的支持,在此谢过各位,你们的支持是我写文章最大的动力^_^. 那么这一篇文章呢,主要是通过一个3D立 ...

  3. PHP 5.6 编译安装选项说明

    `configure' configures this package to adapt to many kinds of systems. Usage: ./configure [OPTION].. ...

  4. ASP.NET MVC开发:Web项目开发必备知识点

    最近加班加点完成一个Web项目,使用Asp.net MVC开发.很久以前接触的Asp.net开发还是Aspx形式,什么Razor引擎,什么MVC还是这次开发才明白,可以算是新手. 对新手而言,那进行A ...

  5. nginx源码分析之模块初始化

    在nginx启动过程中,模块的初始化是整个启动过程中的重要部分,而且了解了模块初始化的过程对应后面具体分析各个模块会有事半功倍的效果.在我看来,分析源码来了解模块的初始化是最直接不过的了,所以下面主要 ...

  6. 创建APPID&&部署服务端教程

    创建APPID&&部署服务端 一.创建APPID 1.打开https://console.developers.google.com ,左击顶部Project,然后左击创建项目 2.输 ...

  7. Oracle-BPM安装详解

    H3 BPM安装包括两个部分,基础工作包括安装IIS..net Freamwork基础框架.安装完成之后,主要配置安装包括数据库,H3 BPM 程序.下面详细介绍Oracle与H3 BPM对接安装的整 ...

  8. WINDOWS系统下MYSQL安装过程中的注意事项

    1.首先MySQL的安装方式有两种:一种是MSI安装方式,很简单就像安装Windows软件一样.另外一种就是ZIP安装方式.这种相对而言比较麻烦.新手推荐MSI安装方式. 安装方式有以下两种: MSI ...

  9. WebAPI

    WebAPI的Host OWIN IIS WebAPI 的handler和Filter有啥区别? WebAPI  常用 Filters Exception Filter Timer Filter Lo ...

  10. Android快乐贪吃蛇游戏实战项目开发教程-06虚拟方向键(五)绘制方向键箭头

    本系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html本系列教程项目源码GitHub地址:https://github.com/jack ...