隐式类型局部变量 - var是那些在没有指定的情况下声明的变量.NET类型明确地。在隐式类型变量中,编译器在编译时根据用于初始化变量的值自动推导出变量的类型。这隐式类型变量概念被引入C#3.0。隐式类型变量并不是为了取代普通变量声明而设计的,它是为了处理一些special-case情况而设计的,例如LINQ(Language-Integrated 查询)。例子:
C#
// C# program to illustrate the concept
// of the implicitly typed variable
using System;
class GFG {
// Main method
static public void Main()
{
// Creating and initializing
// implicitly typed variables
// Using var keyword
var a = 'f';
var b = "GeeksforGeeks";
var c = 30.67d;
var d = false;
var e = 54544;
// Display the type
Console.WriteLine("Type of 'a' is : {0} ", a.GetType());
Console.WriteLine("Type of 'b' is : {0} ", b.GetType());
Console.WriteLine("Type of 'c' is : {0} ", c.GetType());
Console.WriteLine("Type of 'd' is : {0} ", d.GetType());
Console.WriteLine("Type of 'e' is : {0} ", e.GetType());
}
}
输出:
Type of 'a' is : System.Char Type of 'b' is : System.String Type of 'c' is : System.Double Type of 'd' is : System.Boolean Type of 'e' is : System.Int32
在C#4.0,引入了一种新类型,称为动态型。它用于避免编译时类型检查。编译器不会在编译时检查动态类型变量的类型,而是在运行时获取类型。动态类型变量是使用dynamic关键字创建的。例子:
C#
// C# program to illustrate how to get the
// actual type of the dynamic type variable
using System;
class GFG {
// Main Method
static public void Main()
{
// Dynamic variables
dynamic val1 = "GeeksforGeeks";
dynamic val2 = 3234;
dynamic val3 = 32.55;
dynamic val4 = true;
// Get the actual type of
// dynamic variables
// Using GetType() method
Console.WriteLine("Get the actual type of val1: {0}",
val1.GetType().ToString());
Console.WriteLine("Get the actual type of val2: {0}",
val2.GetType().ToString());
Console.WriteLine("Get the actual type of val3: {0}",
val3.GetType().ToString());
Console.WriteLine("Get the actual type of val4: {0}",
val4.GetType().ToString());
}
}
输出:
Get the actual type of val1: System.String Get the actual type of val2: System.Int32 Get the actual type of val3: System.Double Get the actual type of val4: System.Boolean
下面是C#中var和dynamic关键字的一些区别:
.var_vs_dynamic-table { border-collapse: 折叠;宽度:100%; } .var_vs_dynamic-table td { 边框:1px 实线 #5fb962; text-align:左!重要;内边距:8px; } .var_vs_dynamic-table th { 边框:1px 实心#5fb962;内边距:8px; } .var_vs_dynamic-table tr>th{ 背景颜色: #c6ebd9; vertical-align:中间; } .var_vs_dynamic-table tr:nth-child(奇数) { 背景颜色: #ffffff; }
瓦尔 | 动态的 |
---|---|
它是在 C# 3.0 中引入的。 | C#4.0中引入 |
使用 var keyword 声明的变量是静态类型的。 | 使用dynamic关键字声明的变量是动态类型的。 |
变量的类型由编译器在编译时决定。 | 变量的类型由编译器在运行时决定。 |
该类型的变量应在声明时初始化。这样编译器就会根据变量初始化的值来决定变量的类型。 | 该类型的变量不需要在声明时初始化。因为编译器在编译时并不知道变量的类型。 |
如果变量未初始化,则会抛出错误。 | 如果变量未初始化,则不会抛出错误。 |
它支持 Visual Studio 中的 IntelliSense。 | Visual Studio 不支持 IntelliSense |
var myvalue = 10; //语句 1 myvalue = “GeeksforGeeks”; //语句 2 这里编译器会抛出错误,因为编译器已经使用语句 1 确定了 myvalue 变量的类型,即整数类型。当您尝试将字符串分配给 myvalue 变量时,编译器将给出错误,因为它违反了安全规则类型。 | 动态 myvalue = 10; //语句 1 myvalue = “GeeksforGeeks”; //语句2 这里,虽然myvalue 的类型是整数,但编译器不会抛出错误。当您将字符串分配给 myvalue 时,它会重新创建 myvalue 的类型并接受字符串而不会出现任何错误。 |
它不能用于属性或从函数返回值。它只能用作函数中的局部变量。 | 它可用于属性或从函数返回值。 |
相关用法
- C# String Clone()用法及代码示例
- C# String Compare()用法及代码示例
- C# String CompareOrdinal()用法及代码示例
- C# String CompareTo()用法及代码示例
- C# String Concat()用法及代码示例
- C# String Contains()用法及代码示例
- C# String Copy()用法及代码示例
- C# String CopyTo()用法及代码示例
- C# String EndsWith()用法及代码示例
- C# String Equals()用法及代码示例
- C# String Format()用法及代码示例
- C# String GetEnumerator()用法及代码示例
- C# String IndexOf()用法及代码示例
- C# String Insert()用法及代码示例
- C# String IsInterned()用法及代码示例
- C# String IsNormalized()用法及代码示例
- C# String IsNullOrEmpty()用法及代码示例
- C# String IsNullOrWhiteSpace()用法及代码示例
- C# String Join()用法及代码示例
- C# String LastIndexOf()用法及代码示例
- C# String LastIndexOfAny()用法及代码示例
- C# String Normalize()用法及代码示例
- C# String PadLeft()用法及代码示例
- C# String PadRight()用法及代码示例
- C# String Remove()用法及代码示例
注:本文由纯净天空筛选整理自ankita_saini大神的英文原创作品 Difference between var and dynamic in C#。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。