• IS 和AS


    http://www.cnblogs.com/haiyang1985/archive/2009/03/12/1410023.html

    1一. as 运算符用于在兼容的引用类型之间执行某些类型的转换。

    static void Main(string[] args)
    {
        object[] obj = new object[3];
        obj[0] = 10;
        Type t = obj[0].GetType();
        obj[1] = "hello";
        obj[2] = 10;
        for(int i = 0; i < obj.Length; i++)
        {
            string s = obj[i] as string;
            if(s != null)
            {
                Console.WriteLine(s);
            }
            else
            {
                Console.WriteLine("not a string");
            }
        }
        Console.ReadLine();
    }
    结果:
    not a string
    hello
    not a string

    ==============================================================================

    class Base
    {
        public override string ToString()
        {
            return "Base";
        }
    }
    class Derived: Base
    {}
    class Program
    {
        static void Main()
        {
            Derived d = new Derived();
            Base b = d as Base;
            if(b != null)
            {
                Console.WriteLine(b.ToString());
            }
        }
    }

    对于继承类,允许把子类转换成父类,但是不可以把父类转换成子类,不同类之间,值类型不可转换。

    安全性:

    as操作符不会做过的转换操作,当需要转化对象的类型属于转换目标类型或者转换目标类型的派生类型时,那么此转换操作才能成功,而且并不产生新的对象【当不成功的时候,会返回null】。因此用as进行类型转换是安全的。

    效率:

    当用as操作符进行类型转换的时候,首先判断当前对象的类型,当类型满足要求后才进行转换,而传统的类型转换方式,是用当前对象直接去转换,而且为了保护转换成功,要加上try-catch,所以,相对来说,as效率高点。
    需要注意的是,不管是传统的还是as操作符进行类型转换之后,在使用之前,需要进行判断转换是否成功,如下:

    if( newValue! = null)
    {
        //Work with the object named “newValue“
    }

    http://www.cnblogs.com/cgli/archive/2011/05/10/2041731.html

    is检查一个对象是否兼容于指定的类型,并返回一个Boolean值:true或者fasle。注意,is操作符永远不会抛出异常,请看以下示例:

    ClassA
    {
    .... } Object o
    = new Object(); Boolean b1 = (o is Object); //b1为true. Boolean b2 = (o is ClassA); b2为false. 如果对象引用是null, is操作符总是返回false, 因为没有可检查的其类型的对象。 is 操作符通常像下面这样使用: if(obj is ClassA) { ClassA a = (ClassA) obj;... }

     在这一段代码中,CLR实际会检查两次对象类型。is操作符首先核实obj是否兼容于ClassA 类型。如果是,那么在if语句内部执行类型转换时,CLR再次核实obj是否引用一个ClassA。CLR的类型检查增强了安全性,但也会对性能造成一定的影响。这是因为CLR首先必须判断(obj)引用的对象的实际类型。然后CLR必须遍历继承层次结构,用每个基类型去核对指定的类型(ClassA)。

  • 相关阅读:
    http简单demo
    启迪思维:循环链表
    数据表行列转换
    防止短时间内重复提交表单数据js约束
    ASP.NET2.0文件上传以及图片处理
    支付宝倒计时代码
    js 定时刷新页面
    C# 将cookiecontainer写到本地
    用C#生成随机中文汉字验证码的基本原理
    删除指定文件夹里的所有文件
  • 原文地址:https://www.cnblogs.com/ZkbFighting/p/7601020.html
Copyright © 2020-2023  润新知