亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中獲取某個接口的所有子類的集合

發布時間:2020-06-30 11:11:56 來源:網絡 閱讀:2007 作者:OH51888 欄目:編程語言

近日有朋友在論壇(.Net技術論壇)中問到,如何獲取實現某個接口的所有類。這個問題是所有大型項目中經常遇到的問題,有經驗的程序員可能會在開發的時候寫好配置文檔,以方便以后使用,而對于第三方開發的dll或程序則無此遍歷了,那我們該怎么辦呢?

這里我提供了一種基于msdn上對FindInterfaces的說明來解決這個問題。

思路如下:

首先載入一個類庫文件,

//載入dll文件并獲取屬性
Assembly assembly = Assembly.LoadFile(dllFile); 
//取出所有類型集合
Type[] types = assembly.GetTypes();

接下來遍歷所有類型,為了找到,接口類型。再獲取接口的實現類。

 1: //遍歷類型
 2: foreach (Type type in types) 
 3: { 
 4: //找到接口
 5: if (type.GetInterface("InterfaceName") != null && !type.IsAbstract) 
 6: { 
 7: // 這個type就是子類了。
 8: type.GetConstructor(Type.EmptyTypes).Invoke(null); 
 9: } 
 10: }

至此,我們的問題得以解決。

以下是結合msdn得出一個實例:


using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Reflection; 
namespace TestGetInterface 
{ 
class Program 
 { 
publicstaticbool MyInterfaceFilter(Type typeObj, Object criteriaObj) 
 { 
if (typeObj.ToString() == criteriaObj.ToString()) 
returntrue; 
else
returnfalse; 
 } 
staticvoid Main(string[] args) 
 { 
 Assembly assembly = Assembly.LoadFile(@"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll");//你的loadfile
 Type[] types = assembly.GetTypes(); 
 TypeFilter myFilter = new TypeFilter(MyInterfaceFilter); 
//String[] myInterfaceList = new String[2] 
// {"System.Collections.IEnumerable", 
// "System.Collections.ICollection"};
 String[] myInterfaceList = new String[1] 
 { 
 "System.Collections.ICollection"};//支持ICollection
foreach (Type type in types) 
 { 
for (int index = 0; index < myInterfaceList.Length; index++) 
 { 
 Type[] myInterfaces = type.FindInterfaces(myFilter, 
 myInterfaceList[index]); 
if (myInterfaces.Length > 0) 
 { 
 Console.WriteLine("\n{0} implements the interface {1}.", 
 type, myInterfaceList[index]); 
for (int j = 0; j < myInterfaces.Length; j++) 
 Console.WriteLine("Interfaces supported: {0}.", 
 myInterfaces[j].ToString()); 
 } 
//else
// Console.WriteLine(
// "\n{0} does not implement the interface {1}.",
// type, myInterfaceList[index]);
 } 
 } 
 Console.ReadLine(); 
 } 
 } 
 }
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

闻喜县| 读书| 乌鲁木齐市| 新余市| 苏州市| 邯郸市| 皋兰县| 林州市| 平湖市| 北流市| 阜康市| 玉树县| 永德县| 图木舒克市| 江永县| 彩票| 大名县| 九寨沟县| 鹤峰县| 福安市| 永川市| 嘉荫县| 凤台县| 寿光市| 泉州市| 溆浦县| 芦溪县| 永新县| 张家口市| 会泽县| 龙南县| 温州市| 尉氏县| 云梦县| 武冈市| 甘谷县| 建湖县| 铜鼓县| 双流县| 武乡县| 三门峡市|