类型转换的那些趣事(is和as)

Posted aspvn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类型转换的那些趣事(is和as)相关的知识,希望对你有一定的参考价值。

讲到类型转换我们不得不提一下值类型和引用类型。

值类型 int,double,bool,char,struct,enum~。
引用类型 string,object,class。

static void Main(string[] args)
        {
            Demo_Value Value = new Demo_Value();
            Value.numberA = 10;
            Demo_Value Value2 = Value;//将改变前的值赋值给将要改变的值
            Value2.numberA = 15;
            Demo_Class Class = new Demo_Class();
            Class.numberA = 10;
            Demo_Class Class2 = Class;//将改变前的值赋值给将要改变的值
            Class2.numberA = 16;
            Console.WriteLine(Value.numberA+""+Class.numberA);
            Console.WriteLine(Value2.numberA + "" + Class2.numberA);
        }

        /// <summary>
        /// 值类型
        /// </summary>
        public struct Demo_Value
        {
            public int numberA;
        }
        /// <summary>
        /// 引用类型
        /// </summary>
        public class Demo_Class
        {
            public int numberA;
        }

输出:10,16;15,16;

堆和栈中的位置
值类型 值在栈中。
引用类型 值在堆中。

注意:
值类型改变值,会开辟另一个空间,存在两个值,且互不干扰,所以改变前后值互不影响。
引用类型改变值,指向改变,都指向了改变后的值,所以改变前的值变为改变后的值。

类型转换包含显示类型和隐式类型:
1.任何类型都可以安全的转换为其基类类型,可以由隐式转换来完成;
2.任何类型转换为其派生类型时,必须进行显示转换,转换的规则是:(类型名)对象名;
3.使用GetType可以取得任何对象的精确类型;
4.基本类型可以使用Covert类实现类型转换;
5.除了string以外的其他类型都有Parse方法,用于将字符串类型转换为对应的基本类型;
6.值类型和引用类型的转换机制称为装箱(boxing)和拆箱(unboxing)。

is

检查对象类型的兼容性,并返回结果,true或者false;
如果对象为null,则返回值永远为false。

as

检查对象类型的兼容性,并返回结果,如果不兼容就返回null;
如果结果判断为空,则强制执行类型转换将抛出NullReferenceException异常。

就is和as的看来,当对象为null的时候is返回值为false,检查不兼容性时,不兼容就返回null,这里就需要进行两次兼容性检查了。

而as就轻松多了。但是如果只需要检查是否是某个类型时,is可能就快捷多了。

 














以上是关于类型转换的那些趣事(is和as)的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin类的继承 ② ( 使用 is 运算符进行类型检测 | 使用 as 运算符进行类型转换 | 智能类型转换 | Any 超类 )

类型转换类型安全以及is和as的使用

is 和 as 运算符

is和as运算符, 类库:dll,委托,

面向对象 is和as运算符,类库,委托

c# -- is和as运算符