91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

吉林省| 华亭县| 辰溪县| 洛浦县| 海城市| 武隆县| 高要市| 鄄城县| 洪泽县| 苍山县| 偏关县| 威信县| 湄潭县| 奉贤区| 洪泽县| 互助| 宿松县| 通辽市| 丰都县| 乳山市| 托里县| 溆浦县| 太保市| 乌拉特中旗| 平谷区| 拜泉县| 万盛区| 防城港市| 邵阳县| 瑞金市| 象州县| 荣成市| 晋江市| 诸城市| 密山市| 昌黎县| 宾川县| 沂南县| 五家渠市| 庆云县| 宕昌县|