C#中is和as用法实例分析

这篇文章主要介绍了C#中is和as用法实例分析,需要的朋友可以参考下
 

本文实例讲述了C#中is和as的用法,对加深is与as用法的理解有一定的帮助借鉴作用。具体如下:

现来看个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class User
{
}
public class Group
{
}
class Program
{
static void Main(string[] args)
{
Object oUser = new User();
Object user = (Group)oUser;
}
}

这样会报错(InvalidCastException),由于C#安全机制,它会去判断一次。我们这里做了非法的转换。

Is做判断:is说判断对象是不是你要的那个类型(这里说User)

修改后的示例如下:

1
2
3
4
5
6
7
8
9
10
11
class Program
{
static void Main(string[] args)
{
Object obj = new User();
if (obj is User)
{
User user = (User)obj;
}
}
}

这样的话,我们在obj is User这里做了一次判断,我们刚才说了,(User)obj这样的操作(强制转换)编译器还会做一次操作,这样就有性能上面的消耗。来看看AS。

AS操作:如果说改对象就转换,不是则返回null.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Program
{
static void Main(string[] args)
{
 
Object obj = new User();
 
User user = obj as User;
if(user==null)
{
// handle error
//....
}
}
}

列2:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 namespace ConsoleApplication1
 5 {
 6     class IsOrAsClass
 7     {
 8         class Animal
 9         {
10             public void Eat()
11             {
12                 Console.WriteLine("Eating...");
13             }
14             public override string ToString()
15             {
16                return  "I am Eating";
17             }
18         }
19         //家禽类
20         class jia:Animal
21         { 
22 
23         }
24         //
25         class Dog : jia
26         { 
27 
28         }
29         //
30         class bird
31         { 
32 
33         }
34         static void Main()
35         {
36            IsOrAsClass app=new IsOrAsClass(); 
37            //
38            Dog d=new Dog();
39            app.UseIsOpreate(d);
40            app.UseAsOpreate(d);
41            //
42            bird b = new bird();
43            app.UseAsOpreate(b);
44 
45         }
46         //使用Is运算符
47         void UseIsOpreate(Animal a)
48         {
49             if (a is jia)
50             {
51                 jia j = (jia)a;
52                 j.Eat();
53             }
54         }
55         //使用AS运算符
56         void UseAsOpreate(object o)
57         {
58             jia j = o as jia;
59             if (j != null)
60             {
61                 Console.WriteLine(j.ToString());
62             }
63             else
64             {
65                 Console.WriteLine("{0} is not Animal", o.GetType().Name);
66             }
67         }
68     }
69 }

 

注:个人比较喜欢用As,简化了操作也提高了性能,做一个NULL判断,直接处理这种异常也说很方便。

希望本文所述方法对大家的C#程序设计能有一定的帮助与借鉴价值。

 

posted @ 2015-01-15 17:04  sirzhang  阅读(411)  评论(0)    收藏  举报
AmazingCounters.com