C# Keywords - is

 记录一下在平常开发过程当中遇到的一些C# 基础编程的知识!但愿之后能用的着。知识是在日常的开发过程当中去学到的。只有用到了,你才能深刻的理解它,并用好它。express

 本资料来源于:MSND下面是一些相关的code 和 说明编程

 C# is 关键字: 检查对象是否与给定类型相互兼容。 ide

 

  C# Keywords - is 的使用ui

例如,下面的代码能够肯定 obj对象是否为 MyObject 类型的一个实例,或者obj对象是否为从 MyObject 派生的一个类型:lua

 
 这里有三种状况:
一、obj 对象就是指定类型的实例。 因此表达式是true
二、obj 对象是指定类型的基类,也就是MyObject : obj    表达式为 true
三、obj 对象与指定类型不兼容,那么表达式返回的是false.
if (obj is MyObject)
{
}

详细说明:

若是所提供的表达式非空,而且所提供的对象能够强制转换为所提供的类型而不会致使引起异常,则 is 表达式的计算结果将是 true。spa

若是已知表达式将始终是 true 或始终是 false,则 is 关键字将致使编译时警告,可是,一般在运行时才计算类型兼容性。3d

不能重载 is 运算符。code

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

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

   示例:

class Class1 {}
class Class2 {}
class Class3 : Class2 { }

class IsTest
{
    static void Test(object o)
    {
        Class1 a;
        Class2 b;

        if (o is Class1)
        {
            Console.WriteLine("o is Class1");
            a = (Class1)o;
            // Do something with "a."
        }
        else if (o is Class2)
        {
            Console.WriteLine("o is Class2");
            b = (Class2)o;
            // Do something with "b."
        }

        else
        {
            Console.WriteLine("o is neither Class1 nor Class2.");
        }
    }
    static void Main()
    {
        Class1 c1 = new Class1();
        Class2 c2 = new Class2();
        Class3 c3 = new Class3();
        Test(c1);
        Test(c2);
        Test(c3);  // 由于class3 继承class2 ,或这么理解: class2 是class3的基类。 在用is 关键字的时候。它会返回true.
        Test("a string");
    }
}
/*
Output:
o is Class1
o is Class2
o is Class2
o is neither Class1 nor Class2.
*/
相关文章
相关标签/搜索