C#中is与as的区别
在C#中,is是用来判断类型A能否转化为类型B,一般用来作有继承关系的父类与子类是否可以相互转化的判断。
而as是将类型A转化为类型B,一般也是用来做子类与父类的转换。如下面的例子,我们声明三个类
class A
{ }class B : A
{ }class C
{ }可以看到,类B是由类A继承来的。而C是一个独立的类。下面我们利用is与as来做测试。
class Program
{ public static void Main() { B b = new B(); if (b is A) { Console.WriteLine(true); } else { Console.WriteLine(false); } } }打印的结果为true,说明b类可以转换为A类,但b类并没有转化为A类。
再看下面的例子:
class Program
{ public static void Main() { B b = new B(); A a = b as A; if (a != null) { Console.WriteLine(true); } else { Console.WriteLine(false); } } }打印结果为true,这也说明b类可以转换为A类,而且已经将类b转化为了A类型。
注意:既使b类不可以转换为A类,使用is做判断的时候,是可以通过编译的,也不会抛出异常,只是会给出提示。而使用as是会报错的,即通不过编译