C 內獲取泛型方法及擴充套件

2021-06-19 07:59:57 字數 1315 閱讀 9192

c#內我們可以通過反射來動態獲取例項方法和靜態方法,不管方法存在多少個過載都可以通過getmethod內的第二個引數去篩選出所要獲取的方法,**如下:

type

.getmethod

("方法名"

,new

type

);//第二個引數是方法對應的引數型別陣列

但是當我們要獲取的是乙個泛型方法且該方法存在其他過載方法的時候,就會出現異常,異常如下:

在這種情況下,只能通過將相應方法名的方法全部獲取出來,然後通過遍歷去查詢符合條件的方法,**如下:

var

methods

=targettype

.getmethods

(bindingflags

.public

|bindingflags

.instance

).where(m

=>m.

name

=="方法名"&&m

.isgenericmethod

);foreach

(methodinfo

method

inmethods

)//獲取到方法

}

以上**僅僅是對於例項物件內的public方法進行查詢,如果想要查詢靜態的public的其他方法,需要修改的地方只有方法的名字和bindingflags引數就可以了,因此重構一下上面的**就能滿足其他的需求了,重構後的**如下:

public

static

methodinfo

getgenericmethod

(type

targettype

,string

name

,bindingflags

flags

,params

type

parametertypes

)return

method;}

return

null

;}

由於c#3.0為我們提供了擴充套件方法,因此可以讓方法的呼叫更加簡單,而且更能表達方法的作用,只需要在以上**中的type targettype前加入this關鍵字就可以啦,於是乎就可以用以下**進行呼叫了:

type

.getgenericmethod

("方法名"

,繫結約束,

引數陣列);

今天的主題就到這裡啦,謝謝!

C 泛型 泛型類擴充套件

泛型 更準確的使用一種以上的型別 方式 泛型允許我們宣告型別引數化的 我們可以用不同的型別進行例項化 也就是說,我們可以用 型別佔位符 型別引數 來宣告,然後在建立例項時提供真實型別 泛型不是型別,而是型別的模板 c 提供了5種泛型 類 結構 介面 委託和方法。前面四個是型別,方法是成員。一 泛型類...

C 泛型型別 泛型方法

泛型會宣告型別引數 泛型的消費者需要提供型別引數來把佔位符型別填充 public class stack var stack newstack int stack.push 2 stack.push 3 int x stack.pop 2int y stack.pop 3stack open typ...

C 泛型方法

泛型方法是使用型別引數宣告的方法,如下所示 static void swap ref t lhs,ref t rhs 下面的 示例演示一種使用int作為型別引數的方法呼叫方式 public static void testswap 也可以省略型別引數,編譯器將推斷出該引數。下面對 swap 的呼叫等...