2012-02-29 70 views
6

鑑於:System.Type實例。如何獲得某種類型的方法

的目的是讓新推出的方法(我不知道正確的字)的類型,這是 - 不繼承 - 不重寫

我想使用.NET和反思我嘗試了Type.GetMethods()方法。但是,它甚至返回了繼承和重寫的結果。

我想在獲得所有方法後進行過濾。我看了MethodInfo類暴露的屬性/方法。我無法想象如何得到我想要的東西。

例如:我有一個類, class A { void Foo() { } }

當我調用typeof(A).GetMethods(),我得到FooSystem.Object的方法一起:EqualsToStringGetTypeGetHashCode。我想過濾掉只有Foo

有誰知道如何做到這一點?

謝謝。

+1

繼承和重寫的方法屬於該類型。你爲什麼期望他們不被列出?你能解釋一下你試圖完成什麼嗎? – asawyer 2012-02-29 23:22:32

+0

我試圖生成一個報告,說這些方法已經新添加到庫/產品中。由於業務需求,我不想列出繼承/重寫的方法。它們必須作爲其定義類型的一部分進行報告。 – pnvn 2012-02-29 23:49:26

回答

8

GetMethods有一個超載,可讓您指定BindingFlags。例如。所以如果您需要獲取所有已聲明的公共實例方法,則需要傳遞相應的標誌。

var declaredPublicInstanceMethods = 
    typeof(A).GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance); 
+0

謝謝。這大部分工作。重寫的方法仍然顯示。 – pnvn 2012-02-29 23:49:02

+1

那麼,如果A重寫一個方法,該方法是類型聲明的一部分,那麼爲什麼不呢? – 2012-02-29 23:54:58

0

可以過濾返回的MethodInfo收集由DeclaringType:

var methods = typeof(A).GetMethods().Where(mi => mi.DeclaringType== typeof(A)); 
2

我希望這是你想要什麼

var methods = typeof(MyType).GetMethods(System.Reflection.BindingFlags.DeclaredOnly); 
+0

沒有工作。出於某種原因,僅僅聲明標誌是不夠的。不管怎麼說,還是要謝謝你。 – pnvn 2012-02-29 23:50:33

相關問題