天天看點

C#動态建立接口的實作執行個體對象

本文簡單介紹如何動态建立接口interface的實作執行個體對象,包含兩個知識點:

1.如何擷取接口interface的所有實作執行個體對象?

2.如何判斷執行個體對象的構造函數是否有參數?

  首先建立一個名為IAnimal的interface接口對象,并定義一個Cry方法。

  然後,我們分别建立一個Dog,Cat對象,并分别實作Cry方法。

  其中,Dog的構造函數中包含一個名為name的參數。

  Cat的構造函數則為無參構造函數。

  正常的調用方法如下所示。

  運作結果如圖所示

C#動态建立接口的實作執行個體對象

   如果我們想要一次性将所有實作了IAnimal接口對象Cry方法的執行個體全部執行一遍,隻能一個對象一個對象的初始化,然後調用cry方法。這樣太麻煩,我們可以通過動态建立對象并執行對象的方法來實作這個效果。   

下面,我們将開始動态建立所有實作。第一步,我們需要先擷取到所有實作了IAnimal執行個體對象。

  通過反射來擷取目前項目中的程式集對象清單,并根據程式集對象的類型來擷取繼承或實作了IAnimal接口的對象清單。

  我們将結果列印出來看一下

  

C#動态建立接口的實作執行個體對象

    現在,我們已經得到了所有實作IAnimal接口的執行個體對象。講道理來說,我們就可以用Activator動态建立這些對象了。我們可以使用下面的代碼來實作批量動态建立對象。

  然而,卻出現一個錯誤提示:Dog不包含一個無參構造函數。

C#動态建立接口的實作執行個體對象

   是以,建立時需要将Dog的構造函數參數name傳遞進去,如下所示。

  然而,再次提示:Cat的構造函數不存在。

C#動态建立接口的實作執行個體對象

   這是因為Cat不包含一個帶參數的構造函數,所示無法初始化Cat對象。是以,我們需要判斷對象是否是有參構造函數或無參構造函數。

  我們可以通過GetConstructors方法來擷取對象的構造函數集合,并通過GetParameters方法擷取到構造函數的參數集合,判斷構造函數的參數集合是否為空即可判斷該對象的構造函數是否為有參或無參構造函數。

C#動态建立接口的實作執行個體對象

    現在,我們可以愉快的建立對象,并調用對象的方法了。

C#動态建立接口的實作執行個體對象

   最後,附上完整代碼,請大神們不要噴我。

  GitHub

  碼雲

本文來自部落格園,作者:搖曳de風筝,轉載請注明原文連結:https://www.cnblogs.com/pinzi/p/15598531.html