簡體   English   中英

使用反射,如何在接口實現另一個接口時找到接口正在實現的方法

[英]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 ,比如delcaringMethodInfoimplementingMethodInfo但我無法弄清楚如何獲取后者實現前者的信息。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM