亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

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

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

動(dòng)態(tài)類型變量是使用關(guān)鍵字 dynamic 定義的。

dynamic MyDynamicVar = 1;

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

dynamic MyDynamicVar = 1;

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

System.Int32

dynamic 類型會(huì)在運(yùn)行時(shí)根據(jù)分配的值更改類型。以下示例顯示了動(dòng)態(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

動(dòng)態(tài)類型變量將隱式轉(zhuǎn)換為其他類型。

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

方法和參數(shù)

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

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

        stud.DisplayStudentInfo(1, "Bill");// 運(yùn)行時(shí)錯(cuò)誤,沒(méi)有編譯時(shí)錯(cuò)誤
        stud.DisplayStudentInfo("1");// 運(yùn)行時(shí)錯(cuò)誤,沒(méi)有編譯時(shí)錯(cuò)誤
        stud.FakeMethod();// 運(yùn)行時(shí)錯(cuò)誤,沒(méi)有編譯時(shí)錯(cuò)誤
    }
}

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

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

動(dòng)態(tài)語(yǔ)言運(yùn)行時(shí)(DLR)API提供了支持C#中動(dòng)態(tài)類型的基礎(chǔ)結(jié)構(gòu)。