当前位置:首页 > C#学习

C# is和as关键字使用区别

小道7年前 (2018-11-30)C#学习6735

关于类型的判断和转换有is和as这2个操作符。


1、使用AS运算符进行类型转换.

2、先使用IS运算符判断类型是否可以转换,再使用()运算符进行显示的转换.


IS运算符:

IS运算符用于检查对象是否与给定类型兼容,并不进行实际的转换。如果判断对象引用为null,则返回false。由于仅仅判断是否兼容,因此不会抛出异常。使用范围,只适用于引用类型转换、装箱转换和拆箱转换,而不支持值类型转换。


AS运算符:

AS运算符用于在两个应用类型之间进行转换,如果转换失败则返回null,并不抛出异常,因此转换是否成功可以通过结果是否为null进行判断,并且只有在运行时才能判断。AS运算符有一定的适用范围,他只适用于引用类型或可以为null的类型。


在实际工作中尽量使用AS运算符,而少使用()运算符的显示转换的理由:


1、无论是AS和IS运算符,都比直接使用()运算符强制转换更安全。

2、不会抛出异常,免除使用try···catch进行异常捕获的必要和系统开销,只需要判断是否为null。

3、使用AS比使用IS性能更好(C#4.0权威指南上这么说)。

使用is会检查两次对象的类型,一次是核实,一次是强制转换。使用as只进行了一次对象类型的检查。检查对象的类型,是个耗费资源的操作,首先要判断对象的实际类型,然后必须遍历继承树结构(层次结构),去与每个基类核对。

using System;

namespace is_as关键字
{
    class Program
    {
        static void Main(string[] args)
        {
            Person a = new Student();//声明一个学生类,赋值给人类
            Person b = new Student();//声明一个学生类,赋值给人类
            #region is关键字
            if (a is Student)//判断 a 是不是学生类,返回true或false
            {
                Student s = (Student)a;//显式转换
                Console.WriteLine("a 是学生类。");
            }
            else
            {
                Console.WriteLine("a 不是学生类。");
            }
            #endregion
            #region as关键字
            Student ss = b as Student;//将 b 转换成 学生类,如果转换失败,则返回 null。
            if (ss != null)//判断 ss 不为null
            {
                Console.WriteLine("b 是学生类。");
            }
            else
            {
                Console.WriteLine("b 不是学生类。");
            }
            #endregion
            Console.ReadKey();
        }
    }
    class Person //人类
    {

    }
    class Student : Person//学生类,继承 人类
    {

    }
}

输出结果:

image.png


以上内容节选自《CSDN》.

扫描二维码推送至手机访问。

版权声明:本文由小道发布,如需转载请注明出处。

本文链接:https://daobk.com/post/127.html

分享给朋友:

“C# is和as关键字使用区别” 的相关文章

面向对象概念

面向对象概念

面向对象不是取代面向过程的。类、对象。“人”是类,“张三”是“人”这个类的对象。类是抽象的,对象是具体的。按钮就是类,某个按钮就是对象。对象可以叫做类的实例(Instance)。类就像int,对象就像10。字段Field(和某个对象相关的变量),字段就是类的状态。人这个类有姓名、年龄、身高等字段。类…

静态成员和静态类

静态成员和静态类

全局变量。static类变量。不用new就能用的方法:static方法,static方法其实就是普通函数在static方法中可以调用其他static成员,但是不能调用非static成员。在非static方法中可以调用static成员。    class&nbs…

命名空间namespace

命名空间namespace

namespace(命名空间),用于解决类重名问题,可以看做“类的文件夹”。在代码中使用其他类的时候需要using类所在的namespace。System.Collections.ArrayList,快速引入的方法,右键→解析(Ctrl+.)。为什么使用Convert、Console等类不需要自己写…

修改密码

修改密码

修改密码。界面上有旧密码、新密码、重复新密码,假设旧密码为888888,两次输入的新密码必须和旧密码不一样,并且两次输入的新密码必须一致。        private void button1_Cl…