C# is as

if(obj is ClassA) //遍历类层次,看OBJ是不是ClassA类型
{
    ClassA a=(ClassA) obj; //遍历类层次,看obj能否转换为ClassA,不成功则抛出异常
   ...
 }
//作了两次类层次遍历

ClassA a = obj as ClassA //不成功返回null,不会抛出异常
If(a)
{

}
//仅作了 一次类层次遍历

using System.Runtime.InteropServices;
using System;
delegate string DTE(int x, string s);

class MYTestX
{
    class CO
    {

    }
    class CTEST : CO
    {

    }
    class CDT : CO
    {

    }
    static void Main(string[] args)
    {

        CTEST ot = new CTEST();
        CO odt = new CDT();
        ot = (CTEST)odt; //抛出异常
        ot = odt as CTEST;//不会抛出异常,ot = null

        CTEST ot1 = new CTEST();
        CDT odt1 = new CDT();
        ot1 = odt1; //编译错误,不能执行类型转换
 
        Console.WriteLine( ot == null ? "null" : ot.ToString());

    }

}

      

    

  

  

  

  

  

  

  

  

  

  

  

原文地址:https://www.cnblogs.com/timeObjserver/p/5926195.html