zoukankan      html  css  js  c++  java
  • 类型转换的那些趣事(is和as)

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

    值类型:

    1.简单类型:(1)整型:int、long、short、sbyte、byte、unshort、uint、ulong。(2)浮点型:double、float。(3)高精度:decimal。(4)字符型:char。(5)布尔型:bool。

    2.枚举类型:enum。

    3.结构类型:struct。

    引用类型:

    1.类类型:class,object,string。

    2.接口类型:interface

    3.数组类型:int[]、int[,]。

    4.委托类型:delegate。

    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可能就快捷多了。

  • 相关阅读:
    【一】、Cypress下载及安装介绍
    利用Selenium多用户同时开启多线程登录博客园
    实用的jsonpath模块
    Linux常用命令
    Python读取CSV文件
    python算法集锦【四】
    基础类封装-浏览器文件上载类库封装
    基础类封装-查找页面元素类库封装
    基础类封装-键盘类操作库封装
    自动化测试框架Python+selenium+unittest系列 之 配置文件读取(Python)
  • 原文地址:https://www.cnblogs.com/Aspvn/p/9687526.html
Copyright © 2011-2022 走看看