C#基础:var 和 dynamic 的区别

作者:微信公众号:【架构师老卢】
8-3 18:25
27

概述:在 C# 中,var 和 dynamic 都用于类型管理,但它们用于不同的目的并具有不同的行为:C# 语言中 var 和 dynamic 的区别1. 变异1.1 数据类型检查:当我们使用 var keword 声明一个变量时,在编译时执行数据类型检查例// Compiler interpret fruitName as string at compile time var fruitName = Mango;1.2 数据类型变更当我们使用 var keword 声明一个变量时,该变量可以保存任何类型的数据,但我们不能在程序执行期间更改变量的数据类型例var fruitDynamic = Ma

在 C# 中,var 和 dynamic 都用于类型管理,但它们用于不同的目的并具有不同的行为:

C# 语言中 var 和 dynamic 的区别

1. 变异

1.1 数据类型检查:

当我们使用 var keword 声明一个变量时,在编译时执行数据类型检查

// Compiler interpret fruitName as string at compile time  
var fruitName = "Mango";

1.2 数据类型变更

当我们使用 var keword 声明一个变量时,该变量可以保存任何类型的数据,但我们不能在程序执行期间更改变量的数据类型

var fruitDynamic = "Mango";  
// This line would cause a compilation error because fruitName was already interpreted as string if we try to chnage it's data type it will give us compilation error  
// fruitDynamic = 10;

1.3 范围:

变量只能出现在带有 var 关键字的本地范围内。

using System;  
class Program  
{  
  static void Main(string[] args)  
  {  
    // Variable declared inside a block scope  
    var fruitName = "Orange";  
    // Accessible within the block scope  
    Console.WriteLine(fruitName);  
  }  
  // OuteSide the scope this line would cause a compilation error  
  Console.WriteLine(fruitName);  
}

1.4 属性和功能可访问性:

当我们使用 var 关键字声明一个变量时,如果它的数据类型被正确迭代,那么字符串的属性长度将可以在此处访问。

using System;  
class Program  
{  
  static void Main(string[] args)  
  {  
    // Variable declared inside a block scope  
    var fruitName = "Orange";  
    // fruitName is interpreted as string, so Length property is accessible  
    Console.WriteLine(fruitName.Length);  
  }  
}

1.5 C# 发布版本:

var 关键字是在 C# 3.0 中引入的,它是 .NET Framework 3.5 版本的一部分。

2.动态:

2.1 数据类型检查:

当我们使用动态 keword 声明一个变量时,将在运行时执行数据类型检查。

// fruitName is interpreted as string at runtime  
dynamic fruitName = "Mango";

2.2 数据类型变更

当我们使用动态 keword 声明一个变量时,该变量可以保存任何类型的数据,但我们可以在程序执行期间更改变量的数据类型

dynamic fruitDynamic = "Mango";  
// This line would not cause any compilation error  
fruitDynamic = 10;

2.3 范围:

变量可以出现在本地范围内部和外部,带有 dynamic 关键字。

using System;  
class Program  
{  
  static void Main(string[] args)  
  {  
    // Variable declared inside a block scope  
    dynamic fruitName = "Orange";  
    // Accessible within the block scope  
    Console.WriteLine(fruitName);  
  }  
  // Also accessible outside the scope and no compilation and runtime error will come  
  Console.WriteLine(fruitName);  
}

2.4 属性和功能 可访问性:

当我们使用 dynamic 关键字对变量进行贴花时,如果它的数据类型被正确迭代,那么字符串的属性长度将可以在此处访问。但是如果我们将其数据类型从 string 更改为 int,因为 int 没有任何 Length 属性,因此它会给我们带来运行时错误。但是,如果我们尝试执行算术运算,它将正确发生,因为我们已将其动态更改为 int 数据类型。

using System;  
class Program  
{  
 static void Main(string[] args)  
 {  
  // Variable declared inside a block scope  
  dynamic varDynamic = "Orange";  
  // varDynamic is interpreted as string, so Length property is accessible  
  Console.WriteLine(varDynamic.Length);  
  // Now varDynamic is inferred as int at runtime  
  varDynamic = 5;  
  // This line would cause a runtime error because int does not have a Length property  
  Console.WriteLine(varDynamic.Length);  
  // Arithmetic operation with dynamic typing is also happening  
  Console.WriteLine(varDynamic + 10);  
  // Now myDynamic is intertprted as List at runtime  
  varDynamic = new List<int> { 1, 2, 3 };  
  //Count property is again accessible on List  
  Console.WriteLine(varDynamic.Count);  
 }  
}

2.5 C# 发布版本:

dynamic 关键字是在 C# 4.0 中引入的,它是 .NET Framework 4.0 版本的一部分。

总之,var 用于在编译时使用静态类型的隐式类型,而 dynamic 用于在运行时使用后期绑定的动态类型。

阅读排行