• is和as


    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。一般结构如下:

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

    例1:兼容

     1 Label lbl = new Label();
     2 if (lbl is Object)
     3 {
     4 Object objLbl = (Object)lbl;
     5 Response.Write("true");
     6 }
     7 else
     8 {
     9 Response.Write("false");
    10 }
    11 
    12 测试结果为:true

    例2:不兼容

     1 Label lbl = new Label();
     2 if (lbl is TextBox)
     3    {
     4        Response.Write("true");
     5     }
     6 else
     7     {
     8         Response.Write("false");
     9      }
    10 测试结果为:false

    例3:对象为NULL

     1 Label lbl = null;
     2 if (lbl is Object)
     3   {
     4       Response.Write("true");
     5   }
     6 else
     7   {
     8       Response.Write("false");
     9    }
    10 测试结果:false

    2.2   as用法 

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

    例1:兼容

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

    例2:不兼容

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

    例3: 对象为NULL

    1 Object obj = null;
    2  Label lbl = obj as Label;
    3  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。
    • 可以转载该博客,但必须著名博客来源。
  • 相关阅读:
    hdu 5335 Walk Out (搜索)
    Hdu 5336 XYZ and Drops (bfs 模拟)
    Zznu 1913: yifan and matrix (多路归并)
    hdu 5316 Magician (线段树)
    Bzoj 2038: [2009国家集训队]小Z的袜子(hose)
    Poj 1741 Tree (树的分治)
    LightOJ 1027
    1067
    Closest Common Ancestors---poj1470(LCA+离线算法)
    1128
  • 原文地址:https://www.cnblogs.com/wangjiming/p/6136127.html
Copyright © 2020-2023  润新知