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

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

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

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

​while语句:不断要求用户输入一个数字(假定用户输入的都是正整数)

​while语句:不断要求用户输入一个数字(假定用户输入的都是正整数)

while语句:不断要求用户输入一个数字(假定用户输入的都是正整数),当用户输入end的时候显示刚才输入的数字中的最大值。设一个变量int max,初始值为0,用户每输入一次就把用户输入的和max比较一下,如果输入的比max大,则让max等于用户输入。    ...

字符串的处理

字符串的处理

C#中单个字符用单引号包含就是char类型,('a'),单引号中放且只能放一个字符。单个字符也可以表示为字符串,还可以有长度为0的字符串使用s.Length属性来获得字符串中的字符个数string可以看做是char的只读数组。char c = s[1];。C#中字符串有一个重要的特性...

String类常用函数

String类常用函数

String类常用函数ToLower():得到字符串的小写形式。注意字符串是不可变的,所以这些函数都不会直接改变字符串的内容,而是把修改后的字符串的值通过函数返回值的形式返回。ToUpper():得到字符串的大写形式; Trim()去掉字符串两端的空白。s1.Equals(s2, StringCom...

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

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

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