zoukankan      html  css  js  c++  java
  • As 和 Is的区别

    首先来说说As是干什么的:

    代码:

    void OnMouseEnter(object sender, MouseEventArgs e)
    {
    Ellipse ell = sender as Ellipse; //就它了
    ell.Fill = new SolidColorBrush(Colors.Yellow);
    }
    Ellipse ell = sender as Ellipse;     
    sender是事件源,这句的意思是把引发该事件的事件源转成Ellipse类型as是用来强制类型转换的,用as转换的好处是:转换失败不会出现异常,而是返回NULL,这样就比一般的转换安全

    代码://鼠标离开后恢复默认
            private void OnMouseLeaveSizeLabel(object sender, EventArgs e)
    
            {
    
                Label label = sender as Label;
    在这里使用到了sender传入的事件源(事件源就是当前按钮的属性,是lable,button还是testbox,在这里就是lable),现在这个sender是object类型的,所以要对这个事件源进行转换,如果不操作,如this.close(),就不用转换这个sender
                if (label.Name == minisize.Name)
    
                    minisize.Image = Resources.Min;
    
                else if (label.Name == maxsize.Name)
    
                {
    
                    if (maxstate)
    
                        maxsize.Image = Resources.Restore;
    
                    else
    
                        maxsize.Image = Resources.Max;
    
                }
    
                else if (label.Name == closebutton.Name)
    
                    closebutton.Image = Resources.Close;
    
            }

    再说说IS:
    is就是处于对类型的判断。返回true和false。如果一个对象是某个类型或是其父类型的话就返回为true,否则的话就会返回为false。另外is操作符永远不会抛出异常。
     System.Boolean b1 = (o is System.Object);//b1 为true
    System.Boolean b2 = (o is Employee);//b2为false


    现在说说As和Is的区别:

    摘自CLR via C#第三版第四章

    在c#中is可以用来判断一个对象是否兼容给定的类型,如果是返回true,否则返回false。

    同时is是永不会抛出异常的。如果对象引用是null,is操作符总是返回false。

    Object o = new Object();
    Boolean b1 = (o is Object);  //返回true
    Boolean b1 = (o is Employee); //返回false

    一般is操作符的使用方式如下

    //先进行判断
    if( o is Employee){
        Employee e = (Employee) o;
       .....
    }

    在该过程中CLR实际会检查两次对象类型,首先is操作符检查o是否兼容Employee,如果是在if内部

    CLR会再次核实o是否引用一个Employee。这会对性能造成一定影响。这是因为CLR首先必须判断o引用的

    对象实际的类型,然后遍历继承层次结构,用每个基类型去核对。

    C#提供了as操作符来简化这种代码的写法,来提高性能。

    Employee e = o as Employee;
    if(e !==null){
    }

    如果o兼容于Employee,as会返回同一个对象的非null引用。如果不兼容,会返回null。as操作符CLR只会校验一次对象的类型。

    同时它也永远不会抛出异常,所以要检查生成的引用是否为null。





  • 相关阅读:
    ubnt+ros 接入无线
    生成new, old的 shell script
    lua学习记录
    反编译dtsi
    抓包软件PowerSniff开发计划
    android的ArrayMap类
    京东买的5本书
    c++ 变量必须初始化吗???
    cocos2dx 很好的源码分析博文
    cocos2dx 最基本,纯色、字体、图片
  • 原文地址:https://www.cnblogs.com/jingsheng99/p/3992470.html
Copyright © 2011-2022 走看看