zoukankan      html  css  js  c++  java
  • 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 进行类型检查。

     

  • 相关阅读:
    OSX安装nginx和rtmp模块(rtmp直播服务器搭建)
    用runtime来重写Coder和deCode方法 归档解档的时候使用
    Homebrew安装卸载
    Cannot create a new pixel buffer adaptor with an asset writer input that has already started writing'
    OSX下面用ffmpeg抓取桌面以及摄像头推流进行直播
    让nginx支持HLS
    iOS 字典转json字符串
    iOS 七牛多张图片上传
    iOS9UICollectionView自定义布局modifying attributes returned by UICollectionViewFlowLayout without copying them
    Xcode6 iOS7模拟器和Xcode7 iOS8模拟器离线下载
  • 原文地址:https://www.cnblogs.com/jizhiqiliao/p/9811362.html
Copyright © 2011-2022 走看看