竹子_

stay hungry, stay fool
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

c#基础日志一:IS and AS

Posted on 2011-04-26 16:10  竹子_  阅读(191)  评论(0)    收藏  举报

这是第一篇博文,希望我再接再厉,一直写下去,不断去学习,不断去进步 stay hungry, stay fool

本文结构:

  1.定义

  2.规则

  3.用法和区别

  4.实例

1.定义

  is:检查对象是否与给定类型兼容。

  as:用于在兼容的引用类型之间执行转换。

2规则      

  is提供的对象可以强制转换为所提供的类型;如果转换成功则返回 true,反之返回Falseis通常在运行时才计算类型兼容性

  as 运算符类似于强制转换操作;如果转换失败,as 会返回 null 而不引发异常,若转换成功则返回对象类型的实例

3用法和区别

  Is用法:想必通过定义就可以稍微了解is仅进行对象类型之间的检查(此时已进行一次类型转换),如果兼容则需进行再次转换,转换两次一定会影响程序开发的性能  

1 static void Main(string[] args)
2 {
3 object o;
4 if(o is Person)
5 {
6 Person p=(Person)o;
7 }
8
9 }
10
11  class Person{}

  as用法:此对象类型转换仅进行一次,提高了性能

1 static void Main(string[] args)
2 {
3 object o;
4 Person p=o as Person;
5 if(p!=null)
6 {
7 //此处省略。。。
8   }
9
10 }
11
12  class Person{}

 4.实例

  判断一个类是否实现了某个接口

1 static void Main(string[] args)
2 {
3
4 Chinese Zhang=new Chinese();
5 if(c is IPerson)
6 {
7 //实现该接口
8 }
9
10
11 Chinese Wang=new Chinese();
12 IPerson p=Wang as IPerson;
13 if(p!=null)
14 {
15 //实现了该接口
16 }
17 }
18
19 interface IPerson
20 {
21 void Say();
22 }
23
24 class Chinese:IPerson
25 {
26 public void Say()
27 {
28 //say something
29 }
30 }

题外话:有另一种方法可判断类是否实现某接口

1 static void Main(string[] args)
2 {
3 Chinese Zhang=new Chinese();
4 if(Zhang.GetType().GetInterface("IPerson") !=null)
5 {
6 //实现了该接口
7 }
8 }