A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 袁晓俊 于 2014-5-1 08:54 编辑

is关键字和as关键字的区别和含义,什么情况下用?

评分

参与人数 1技术分 +1 收起 理由
张旭辉 + 1

查看全部评分

4 个回复

倒序浏览
1. is运算
Chinese ch new Chinese();
//隐士转换,把子类变量赋值给父类变量
Person p =ch;
Person p = new Chinese();
Chinese ch = (Chinese)p;
//如果对象不在同一个继承树路径上则不能强制类型转化
Dog g = new Dog();
Chinese ch =(Chinses)g;//错误
//is运算
if(p is Chinsese)
{
      Console.WriteLine("中国人");
}
else if(p is Korean)
{
      Console.WriteLine("韩国人");
}

2. as运算
Chinese ch = p as Chinses;
if(ch!=null)
{
     Console.WriteLine("中国人");
}
Korean ch= p as Korean;
if(ch!=null)
{
      Console.WriteLine("韩国人");
}

评分

参与人数 1技术分 +2 收起 理由
张旭辉 + 2

查看全部评分

回复 使用道具 举报
感谢,,,,,,,,,,
回复 使用道具 举报
  1. #region as运算符与强制转换运算符类似,只是当转换失败时他不抛出异常,而是返回引用
  2.             Console.WriteLine("as运算符:");
  3.             #region 例一
  4.             Animal anAnimal = new Animal();
  5.             Dog d = anAnimal as Dog;  // 转换失败,这将返回null引用,因为Animal“不是”Dog(Animal不是继承自Dog)
  6.             if (d == null)
  7.             {
  8.                 Console.WriteLine("例一:d == null");
  9.             }
  10.             #endregion

  11.             #region 例二
  12.             Dog d2 = new Dog();
  13.             Animal anAnimal2 = d2 as Animal; // 转换成功,这将返回Animal类型的引用,因为“Dog”是“Animal”(Dog继承自Animal)
  14.             if (anAnimal2 != null)
  15.             {
  16.                 Console.WriteLine("例二:anAnimal2的实际类型为{0}", anAnimal2.GetType().Name);
  17.             }
  18.             #endregion
  19.             #endregion

  20.             #region 我们可以使用is运算符来检查转换是否会成功,返回bool
  21.             Console.WriteLine("\nis运算符:");
  22.             #region 例一
  23.             Dog d3 = new Dog();
  24.             Console.WriteLine("d3的类型为{0}", d3.GetType().Name);
  25.             Console.WriteLine("d3可以转换为Animal类型? {0}", d3 is Animal);
  26.             Console.WriteLine("d3可以转换为Cat类型? {0}", d3 is Cat);
  27.             #endregion

  28.             #region 更深一层的例子
  29.             Animal imADog = new Dog();
  30.             Console.WriteLine("\nimADog的类型为{0}", imADog.GetType().Name);
  31.             Console.WriteLine("imADog能被转换为Cat类型吗? {0}", imADog is Cat);
  32.             Console.WriteLine("imADog能被转换为Dog类型吗? {0}", imADog is Dog);
  33.             #endregion
  34.             #endregion

  35.             #region is和as运算符的限制:它们只能用于可以为null的类型
  36.             //int i = 1;
  37.             //int i2 = i as int; // 编译错误,int不是可以为null的类型

  38.             //int i3 = 1;
  39.             //if (i3 is int) { } // 编译错误,int不是可以为null的类型
  40.             #endregion
复制代码
建议把代码亲自编译一次,有问题请找我讨论。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
明白,,,,,,感谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马