隱式類型局部變量 - 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#。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。