zoukankan      html  css  js  c++  java
  • C#中as和is关键字

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

    static void Main(string[] args)
    
    {
    
        object[] obj = new object[3];
    
        obj[0] = new class1();
    
        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());
    
            }
    
    
    
        }
    
    }

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

    二.is检查对象是否与给定类型兼容。

    例如,下面的代码可以确定对象是否为 MyObject 类型的一个实例,或者对象是否为从 MyObject 派生的一个类型:

     
    if (obj is MyObject)
    {
    }

    如果所提供的表达式非空,并且所提供的对象可以强制转换为所提供的类型而不会导致引发异常,则 is 表达式的计算结果将是 true。

    如果已知表达式将始终是 true 或始终是 false,则 is 关键字将导致编译时警告,但是,通常在运行时才计算类型兼容性。

    不能重载 is 运算符。

    请注意,is 运算符只考虑引用转换、装箱转换和取消装箱转换。不考虑其他转换,如用户定义的转换。

    在 is 运算符的左侧不允许使用匿名方法。lambda 表达式属于例外。

    class MyQuickSort
    
    {
    
        static void Main(string[] args)
    
        {
    
            class2 c2 = new class2();
    
    
    
            if (c2 is class1)
    
            {
    
                Console.WriteLine("Yes");
    
            }
    
            else
    
            {
    
                Console.WriteLine("No");
    
            }
    
    
    
            Console.ReadLine();
    
        }
    
    }
    
    
    
    class class1
    
    {
    
        public override string ToString()
    
        {
    
            return "";
    
        }
    
    }
    
    
    
    class class2:class1
    
    {
    
    
    
    }

    结果:yes

  • 相关阅读:
    C#学习之Enum
    Ten MustHave Tools Every Developer Should Download Now
    C#学习之Random
    C#学习之Exception
    WCF Data Contract之KnownType
    ESQL应该注意的地方
    Windows 安全认证是如何进行的?
    十个必备的.NET开发小工具
    c#中判断一个process是32bit还是64bit
    怎么用python和javascript把多张png拼成一个gif
  • 原文地址:https://www.cnblogs.com/CandiceW/p/4961299.html
Copyright © 2011-2022 走看看