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

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

小道6年前 (2018-11-30)C#学习4902

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

while语句:不断要求用户输入一个数字,然后打印这个数字的二倍,当用户输入q的时候程序退出(return)。

while语句:不断要求用户输入一个数字,然后打印这个数字的二倍,当用户输入q的时候程序退出(return)。

while语句:不断要求用户输入一个数字,然后打印这个数字的二倍,当用户输入q的时候程序退出(return)。            Console.WriteLine("...

对象的引用

对象的引用

int、decimal、bool、byte等基础类型(值类型)是传递拷贝;对象(引用类型)则是传递引用。(引用类型包括:类、数组、接口、string)因为基础类型不怎么占内存,而对象则比较占内存。    class Program  &n...

命名空间namespace

命名空间namespace

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

索引器

索引器

C#中提供了按照索引器进行访问的方法定义索引器的方式:string this[int index]{get { return ""; }set { }},string为索引器的类型,[]中是参数列表。进行索引器写操作就是调用set代码块,在set内部使用value得到用户设置的值...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。