[英]How do I use reflection to get properties explicitly implementing an interface?
[英]Using reflection, how do I find the method an interface is implementing when it's implementing another interface
假設我有兩個接口:
public interface IDeclaring
{
String GetValue();
}
public interface IImplementing : IDeclaring
{
String IDeclaring.GetValue() => "IDerived";
}
我正在編寫一個在運行時實現接口的庫,因此需要了解哪些接口方法需要實現,哪些已經實現。
使用反射,我現在每個接口都有一個MethodInfo
,比如delcaringMethodInfo
和implementingMethodInfo
但我無法弄清楚如何獲取后者實現前者的信息。
有MethodInfo.GetBaseDefinition
但這不適用於接口。
但是,該信息必須存在於某個地方並且可以訪問。
能夠檢查兩個MethodInfo
是否具有相同的簽名可能就足夠了,但我不知道如何輕松地做到這一點,因為這並不簡單。 我懷疑我需要檢查它們是否具有相同的參數和參數修飾符。
正如 Jeroen 所說,沒有合適的 API 來獲取該信息。
在程序集級別,此信息在方法主體中顯示為聲明:
.method private hidebysig specialname virtual final
instance string I.get_Name() cil managed
{
.override I::get_Name
// Code size 6 (0x6)
.maxstack 8
IL_0000: newobj instance void [System.Runtime]System.NotImplementedException::.ctor()
IL_0005: throw
} // end of method D::I.get_Name
但是這些聲明無法從我所知道的任何 API 中檢索到。
如果是接口, MethodInfo.GetBaseDefinition
方法返回方法本身。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.