当前位置:首页 > C#学习 > 正文内容

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

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

关于类型的判断和转换有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关键字使用区别” 的相关文章

机器人:具有模糊判断

机器人:具有模糊判断

自己动手写聊天机器人,能够回答不同城市的天气、回答感情问题、问的次数过多还会饿死,提问可以模糊提问(包含指定关键词)。问“天气:北京”就回复“今天北京天气很好。”。        static void&nbs...

函数的ref、out参数

函数的ref、out参数

函数参数默认是值传递的,也就是“复制一份”ref必须先初始化,因为是引用,所以必须先“有”,才能引用,而out则是内部为外部赋值,所以不需要初始化,而且外部初始化也没用。ref应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所。  ...

定义类:一个类可有有多个实例。

定义类:一个类可有有多个实例。

一个类可有有多个实例。类就是把一系列相关的变量(状态)、行为定义为一个整体。字段记录的就是这个对象相关的数据。    class Program     {     ...

静态成员和静态类

静态成员和静态类

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