C#基础:var 和 dynamic 的区别

4ce63e0091998b34197a8b19f3c952e0.jpeg在 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 用于在运行时使用后期绑定的动态类型。

如果你喜欢我的文章,请给我一个赞!谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值