• var,object和dynamic


    1.前言

    C# 中存在三种形式的类型声明字段,使得字段可以接受多种类型的数据,它们分别是 var,object 以及 dynamic。下面的内容将对这三种的差异进行讲解分析。

    首先,由于 C# 是强类型语言,所以编译器会在编译期间就会执行类型检查。

    2.var

    在一般情况下,定义特定类型时使用的是显式类型的声明,如:

    string str = "asdf";

    以上代码显式地将字符串 "asdf" 声明为 string 类型。

    而使用 var 进行类型声明时,进行的是隐式类型的声明,如:

    var str = "asdf";

    当编译器在进行编译时,编译器将会为字段 str 创建最为适当的类型(即已确定类型),一旦通过编译,则 str 的类型就不能在发生改变。如以下操作将会报错:

    var str = "asdf";
    // str = 123
    // Error: Cannot implicitly convert type 'int' to 'string' 

    使用var定义变量时有以下四个特点:

    1. 必须在定义时初始化。也就是必须是 var s = “abcd” 形式,而不能是如下形式: var s; s = “abcd”;
    2. 一但初始化完成,就不能再给变量赋与初始化值类型不同的值。
    3. var 只能声明局部变量,for 语句,foreach 语句,using 域。
    4. 使用 var 定义变量和 object 不同,它在效率上和使用强类型方式定义变量完全一样。

    对于像 int、double、string 等简单数据类型,我们最好使用特定的数据类型来声明变量,以免让事情变得复杂。但当创建了一个很大的类,那么为了方便创建对象,最好使用 var 关键字。还有一种约定俗成的习惯,当我们使用 LINQ 或 Anonymous 类型时,必须使用 var 关键字。

    3.object

    object 类型在 .NET Framework 中是 Object 的别名。在 C# 的统一类型系统中,所有类型(预定义类型、用户定义类型、引用类型和值类型)都是直接或间接从 Objetc 继承的, object 的实质是引用类型可以将任何类型的值赋给 object 类型的变量。将值类型的变量转换为对象的过程称为“装箱”。将对象类型的变量转换为值类型的过程称为“拆箱”。

    object 类型的简单声明如下:

    object a = "asdf";
    a = 123;

    4.dynamic

    dynamic 声明的类型编译时不进行类型检查,而是在运行时执行类型检查,其声明示例如下:

    dynamic d = "asdf";
    d++;

    在对以上代码进行编译时,编译器不会报错,但当执行该代码时,编译器将会报错"Operator '++' cannot be applied to operand of type 'string"。

    dynamic 被编译后是一个 Object 类型,编译器编译时不会对 dynamic 进行类型检查。

     

  • 相关阅读:
    解决 el-table在ie11中默认状态下不是百分百展开的问题
    在vue中使用lexible.js 通过props传的style样式无法转换成rem
    解决 el-select 与 el-radio 组合字体发生闪烁问题
    解决element生成的下拉菜单,不在父级之下,而是在body之下,通过父级控制该下拉菜单的样式,达到不跟别的地方冲突的目的
    解决nvm use提示切换node版本成功,实际却没有切换过对应版本
    vue-element-admin安装失败的问题
    今天转正了,感谢博客园让我找到工作!
    electron-vue中点击按钮,实现打开程序目录里面的某个文件
    项目实战---模拟站酷网站
    vue实现选项卡切换效果
  • 原文地址:https://www.cnblogs.com/jizhiqiliao/p/9811362.html
Copyright © 2020-2023  润新知