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

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

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

关于类型的判断和转换有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://www.daobk.com/post/127.html

分享给朋友:

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

登录系统

登录系统

登录界面。登录错误三次退出程序,假设用户名、密码是admin、888888,不区分大小写。(易错点:局部变量与类变量)退出程序this.Close()或者Application.Exit()    public partial class&...

修改密码

修改密码

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

简单的四则运算器

简单的四则运算器

简单的四则运算器        private void button1_Click(object sender, EventArgs e)   &...

省市选择器

省市选择器

省市选择器        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)/...