最近看到百度搜索出来的某些文章,对C# is关键字的解释有误,记录一下吧,摘自官方,不要误导人。
以下摘自msdn:
is
关键字在运行时评估类型兼容性。 它确定对象实例或表达式结果是否可转换为指定类型。 语法如下:
C#复制
expr is type
其中 expr 是计算结果为某个类型的实例的表达式,而 type 是 expr 结果要转换到的类型的名称。 如果 expr 非空,并且通过计算表达式得出的对象可转换为 type,则 is
语句为 true
;否则返回 false
。
例如,以下代码确定 obj
是否可转换为 Person
类型的实例:
C#复制
if (obj is Person) {
// Do something if obj is a Person.
}
如果满足以下条件,则 is
语句为 true:
-
expr 是与 type 具有相同类型的一个实例。
-
expr 是派生自 type 的类型的一个实例。 换言之,expr 结果可以向上转换为 type 的一个实例。
-
expr 具有属于 type 的一个基类的编译时类型,expr 还具有属于 type 或派生自 type 的运行时类型。 变量的编译时类型是其声明中定义的变量类型。 变量的运行时类型是分配给该变量的实例类型。
-
expr 是实现 type 接口的类型的一个实例。
由此,举个例子A,B,C是类,I表示接口,他们之间的关系是:A:B, B:C, C:I。则对应上面的4个条件,表示如下:
- expr = new A(); type = new A()
- expr = new A(); type = B
- C expr; type = B; C = B 或 C expr; type = B; C = A
- expr = new C(); type = I