2012-07-18 40 views
3

我想通過反射找到最合適的方法來調用,當我有一個類型傳遞給該方法。c#反射查找重載方法wr繼承

這是令人擔憂的我用相同數量的參數,像這樣的超載邊緣情況:

class UserClass {} 
class UserClassB : UserClass {} 

class SomeClass { 
    void method(object x); 
    void method(UserClass x); 
} 

在運行時我感興趣的調用method,而我手上的類型是UserClassB

最合適的是method(UserClass)

問題是,當使用typeof(SomeClass).GetMethod("method", new Type[] { typeof(UserClass2) }));它將返回一個空值,因爲我認爲它根據傳遞類型的精確匹配進行搜索。

任何想法?謝謝。

回答

2

您錯過了綁定標誌。 使用超負荷,您可以通過以下標誌:
BindingFlags.Instance | BindingFlags.NonPublic

由於GetMethod將查找公共方法,除非您指定了非公開方法,否則您將獲得null值。

var method = typeof(SomeClass).GetMethod("method", BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { typeof(UserClass) },null); 
+0

你是對的:)事實上,無論如何,我只需要公開...但我測試它不正確。謝謝! – ravyoli 2012-07-18 13:06:37