首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

as与is用法小结

2013-11-03 
as与is用法总结1 is关键字is关键字检查对象是否与给定类型兼容。例如:Object objnew Object()if (obj is

as与is用法总结

1 is关键字

is关键字检查对象是否与给定类型兼容。

例如:

Object obj=new Object();if (obj is string){}

代码中检查obj 对象是否与类型string兼容。 

示例代码:

public class Student{    public string Name { get; set; }    public string Class { get; set; }    public float Score { get; set; }}public class Teacher{    public string Name { get; set; }    public string Course { get; set; }}static void Main(string[] args){    Student student = new Student();    Teacher teacher = new Teacher();    Test(student);    Test(teacher);    Test("Wolf");}static void Test(object obj){    if (obj is Student)    {        Student student = (Student)obj;        Console.WriteLine("I'm a Student");    }    else if (obj is Teacher)    {        Teacher teacher = (Teacher)obj;        Console.WriteLine("I'm a Teacher");    }    else    {        Console.WriteLine("I'm not a Teacher,not a Student,and I'm not a Person");    }}

Test方法中对传入对象使用is关键字判断其是否与指定类型兼容,兼容则进行指定操作。

运行结果如下:

as与is用法小结

 对象与给定类型兼容又该怎样理解呢?

“兼容”表示对象是该类型,或者派生于该类型。

关于这一点,下面做个简单实验。

在前面示例代码的基础上,增加两个类Person及LittleStudent,且Student类继承自Person类。

public class Person{}public class LittleStudent:Student{}public class Student:Person{    //其他代码不变}Object obj = new Object();Person person = new Person();Student student = new Student();Teacher teacher = new Teacher();LittleStudent lstudent = new LittleStudent();if (obj is Student) //falseif (person is Student) //falseif (student is Student)//trueif (teacher is Student)//falseif (lstudent is Student)//true

 

2 as关键字

as关键字用于在兼容的引用类型之间执行转换。类似于强制转换操作;如果转换不可行,as 会返回 null 而不会引发异常。

等效于:

expression is type ? (type)expression : (type)null

例如:

代码片段1:

Object obj = new Object();Student s = obj as Student ;if(s != null){    //做你想做的}

代码片段1等价于:

代码片段2:

Object obj = new Object();if (obj is Student){    Student student = (Student)obj;}

在上面两种方式中,后一个版本进行了两次类型检测,效率较低。

 

3 写在后面:

is 运算符只考虑引用转换、装箱转换和取消装箱转换。不考虑其他转换,如用户定义的转换。

 

热点排行