- #region as运算符与强制转换运算符类似,只是当转换失败时他不抛出异常,而是返回引用
- Console.WriteLine("as运算符:");
- #region 例一
- Animal anAnimal = new Animal();
- Dog d = anAnimal as Dog; // 转换失败,这将返回null引用,因为Animal“不是”Dog(Animal不是继承自Dog)
- if (d == null)
- {
- Console.WriteLine("例一:d == null");
- }
- #endregion
- #region 例二
- Dog d2 = new Dog();
- Animal anAnimal2 = d2 as Animal; // 转换成功,这将返回Animal类型的引用,因为“Dog”是“Animal”(Dog继承自Animal)
- if (anAnimal2 != null)
- {
- Console.WriteLine("例二:anAnimal2的实际类型为{0}", anAnimal2.GetType().Name);
- }
- #endregion
- #endregion
- #region 我们可以使用is运算符来检查转换是否会成功,返回bool
- Console.WriteLine("\nis运算符:");
- #region 例一
- Dog d3 = new Dog();
- Console.WriteLine("d3的类型为{0}", d3.GetType().Name);
- Console.WriteLine("d3可以转换为Animal类型? {0}", d3 is Animal);
- Console.WriteLine("d3可以转换为Cat类型? {0}", d3 is Cat);
- #endregion
- #region 更深一层的例子
- Animal imADog = new Dog();
- Console.WriteLine("\nimADog的类型为{0}", imADog.GetType().Name);
- Console.WriteLine("imADog能被转换为Cat类型吗? {0}", imADog is Cat);
- Console.WriteLine("imADog能被转换为Dog类型吗? {0}", imADog is Dog);
- #endregion
- #endregion
- #region is和as运算符的限制:它们只能用于可以为null的类型
- //int i = 1;
- //int i2 = i as int; // 编译错误,int不是可以为null的类型
- //int i3 = 1;
- //if (i3 is int) { } // 编译错误,int不是可以为null的类型
- #endregion
复制代码 建议把代码亲自编译一次,有问题请找我讨论。
|