• C#中as和is关键字 Timothy


    一. 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




     

  • 相关阅读:
    AngularJS--学习笔记(一)
    一行代码写出随机数
    2015最新--浏览器分布图
    JQ系列:css操作
    Eclipse启动Tomcat,45S超时问题解决
    深入理解浏览器兼容性模式
    常见浏览器兼容性问题与解决方案
    面向对象设计模式之一观察者模式
    自定义样式RatingBar的使用
    Python之Matplot——01.堆叠柱状图的绘制
  • 原文地址:https://www.cnblogs.com/haiyang1985/p/1410023.html
Copyright © 2020-2023  润新知