中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

虹口区| 定州市| 车致| 扶沟县| 纳雍县| 夹江县| 长宁区| 沽源县| 灯塔市| 海淀区| 金昌市| 凤城市| 和田市| 武陟县| 印江| 咸宁市| 焉耆| 长岭县| 横山县| 浏阳市| 海原县| 宜丰县| 屏东县| 交口县| 商水县| 桑植县| 江陵县| 敖汉旗| 宣化县| 湟源县| 保山市| 安阳县| 漳州市| 依安县| 利辛县| 木兰县| 文山县| 炎陵县| 遂川县| 静安区| 达孜县|