當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C# var和dynamic的區別用法及代碼示例


隱式類型局部變量 - 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 的類型並接受字符串而不會出現任何錯誤。
它不能用於屬性或從函數返回值。它隻能用作函數中的局部變量。 它可用於屬性或從函數返回值。


相關用法


注:本文由純淨天空篩選整理自ankita_saini大神的英文原創作品 Difference between var and dynamic in C#。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。