溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C#中的早期綁定和后期綁定是什么意思

發(fā)布時(shí)間:2020-12-03 12:04:46 來(lái)源:億速云 閱讀:270 作者:小新 欄目:編程語(yǔ)言

小編給大家分享一下C#中的早期綁定和后期綁定是什么意思,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

早期綁定

早期綁定也稱靜態(tài)綁定,是指編譯時(shí)綁定;早期綁定對(duì)象基本上是強(qiáng)類型對(duì)象或靜態(tài)類型對(duì)象。

早期綁定在編譯期間識(shí)別并檢查方法、屬性、函數(shù),并在應(yīng)用程序執(zhí)行之前執(zhí)行其他優(yōu)化。在這個(gè)綁定中,編譯器已經(jīng)知道它是什么類型的對(duì)象以及它擁有的方法或?qū)傩浴?/p>

早期綁定的優(yōu)點(diǎn)

1、性能很快

2、易于編碼、開(kāi)發(fā)

3、減少了運(yùn)行時(shí)錯(cuò)誤的數(shù)量

示例:

using System; 
  
class People { 
  
    // data members 
    public string name; 
    public string subject; 
  
    // public method 
    public void details(string name, string subject) 
    { 
        this.name = name; 
        this.subject = subject; 
        Console.WriteLine("我的名字是: " + name); 
        Console.WriteLine("我最喜歡的科目是: " + subject); 
    } 
} 
  
class GFG { 
  
    // Main 方法
    static void Main(string[] args) 
    { 
  
        // 創(chuàng)建People類的對(duì)象
        People g = new People(); 
  
        // 調(diào)用People類的方法 
        g.details("Ankita", "C#"); 
  
        // 調(diào)用“myMethod()”時(shí)出錯(cuò)
        // 因?yàn)檫@個(gè)方法不屬于People類,或者編譯器在編譯時(shí)不知道m(xù)ymethod()
        g.mymethod(); 
    } 
}

編譯時(shí)發(fā)生錯(cuò)誤:

C#中的早期綁定和后期綁定是什么意思

說(shuō)明:在上面的示例中,我們有一個(gè)名為People的類。該類包含details()方法。這里,編譯器已經(jīng)知道People中存在的屬性和方法。但是當(dāng)我們嘗試調(diào)用mymethod()時(shí),它會(huì)拋出一個(gè)錯(cuò)誤,因?yàn)榫幾g器不知道這個(gè)方法。

后期綁定

后期綁定也稱動(dòng)態(tài)綁定。在后期綁定中,編譯器不知道它是什么類型的對(duì)象以及它擁有的方法或?qū)傩裕@里的對(duì)象是動(dòng)態(tài)對(duì)象。對(duì)象的類型是根據(jù)它在運(yùn)行時(shí)在右側(cè)保存的數(shù)據(jù)來(lái)確定的?;旧?,是通過(guò)使用虛擬方法來(lái)實(shí)現(xiàn)后期綁定。

后期綁定的最大優(yōu)點(diǎn)是這種類型的對(duì)象可以保存對(duì)任何對(duì)象的引用,但缺少早期綁定對(duì)象的許多優(yōu)點(diǎn)。比如:后期綁定的性能比早期綁定慢,因?yàn)樗枰谶\(yùn)行時(shí)進(jìn)行查找。

示例:

using System; 
  
class GFG { 
    static void Main() 
    { 
        // Dynamic objects 
        dynamic obj = 4; 
        dynamic obj1 = 5.678; 
  
        // 顯示對(duì)象的類型
        Console.WriteLine("對(duì)象類型為:"); 
  
        // 使用getType()方法來(lái)獲取類型
        Console.WriteLine(obj.GetType()); 
        Console.WriteLine(obj1.GetType()); 
    } 
}

輸出:

C#中的早期綁定和后期綁定是什么意思

說(shuō)明:

在上面的示例中,obj保存整數(shù)類型數(shù)據(jù),obj1保存雙類型數(shù)據(jù)。但是編譯器不會(huì)在編譯時(shí)解決這些問(wèn)題。在運(yùn)行時(shí),這些動(dòng)態(tài)對(duì)象分別被檢測(cè)并轉(zhuǎn)換為System.Int32和System.Double。這就是為什么運(yùn)行時(shí)解析過(guò)程被稱為后期綁定的原因。

看完了這篇文章,相信你對(duì)C#中的早期綁定和后期綁定是什么意思有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI