zoukankan      html  css  js  c++  java
  • 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




     

  • 相关阅读:
    CSS 02
    CSS 01
    HTML 02
    SpringCloud学习(5)——Feign负载均衡
    SpringCloud学习(4)——Ribbon负载均衡
    SpringCloud学习(3)——Eureka服务注册中心及服务发现
    SpringCloud学习(2)——Rest微服务案例
    SpringCloud学习(1)——SpringCloud概述
    Spring 源码学习(4) —— 动态AOP使用示例
    Spring 源码学习(3) —— 增加属性注册编辑器
  • 原文地址:https://www.cnblogs.com/haiyang1985/p/1410023.html
Copyright © 2011-2022 走看看