C# 動態(tài)類型(Dynamic)

C#4.0(.NET 4.5)引入了一個名為 dynamic 的新類型,它避免了編譯時類型檢查。dynamic 類型在編譯時跳過類型檢查;相反,它在運行時解析類型。

動態(tài)類型變量是使用關鍵字 dynamic 定義的。

dynamic MyDynamicVar = 1;

在大多數(shù)情況下,編譯器會將動態(tài)類型編譯為對象類型。但是,動態(tài)類型變量的實際類型將在運行時解析。

dynamic MyDynamicVar = 1;

Console.WriteLine(MyDynamicVar.GetType());
輸出:

System.Int32

dynamic 類型會在運行時根據(jù)分配的值更改類型。以下示例顯示了動態(tài)變量如何根據(jù)分配的值更改類型。

static void Main(string[] args)
{
    dynamic MyDynamicVar = 100;
    Console.WriteLine("Value: {0}, Type: {1}", MyDynamicVar, MyDynamicVar.GetType());

    MyDynamicVar = "Hello World!!";
    Console.WriteLine("Value: {0}, Type: {1}", MyDynamicVar, MyDynamicVar.GetType());

    MyDynamicVar = true;
    Console.WriteLine("Value: {0}, Type: {1}", MyDynamicVar, MyDynamicVar.GetType());

    MyDynamicVar = DateTime.Now;
    Console.WriteLine("Value: {0}, Type: {1}", MyDynamicVar, MyDynamicVar.GetType());
}
輸出:
值:100,類型:System.Int32
值:Hello World !!,類型:System.String
值:True,類型:System.Boolean
值:01-01-2014,類型:System.DateTime

動態(tài)類型變量將隱式轉換為其他類型。

dynamic d1 = 100;
int i = d1;
		
d1 = "Hello";
string greet = d1;
		
d1 = DateTime.Now;
DateTime dt = d1;

方法和參數(shù)

如果將類對象分配給動態(tài)類型,則編譯器將不會檢查保存自定義類對象的動態(tài)類型的正確方法和屬性名稱??聪旅娴膶嵗?。

class Program
{
    static void Main(string[] args)
    {
        dynamic stud = new Student();

        stud.DisplayStudentInfo(1, "Bill");// 運行時錯誤,沒有編譯時錯誤
        stud.DisplayStudentInfo("1");// 運行時錯誤,沒有編譯時錯誤
        stud.FakeMethod();// 運行時錯誤,沒有編譯時錯誤
    }
}

public class Student
{
    public void DisplayStudentInfo(int id)
    {
    }
}

在上面的示例中,C#編譯器不檢查參數(shù),參數(shù)類型 或 根本不存在。它在運行時驗證這些內容,如果無效,則拋出運行時異常。請注意,動態(tài)類型不支持Visual Studio IntelliSense。請注意,動態(tài)類型不支持Visual Studio IntelliSense。

動態(tài)語言運行時(DLR)API提供了支持C#中動態(tài)類型的基礎結構。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清