2012-01-03 20 views
0

underlyingtypeからすべてのメソッド名をリストしたいと思います。c#反射を使って基底型のメソッド名を取得する

私は

var methods = this.GetType().UnderlyingSystemType.GetMethods(); 

を試みたが、動作しません。

EDIT

追加例

public class BaseClass 
{ 
    public BaseClass() 
    { 
     var methods = this.GetType().UnderlyingSystemType.GetMethods(); 
    } 
} 

public class Class1:BaseClass 
{ 
    public void Method1() 
    {} 

    public void Method2() 
    {} 
} 

私は方法1と方法2

+1

基本的なタイプは何ですか?何が返されますか?より多くの情報が必要です – user1231231412

+3

何の根底にあるタイプですか?そして何が起こるのですか? 「うまくいかない」とは決して良い説明ではありません。詳細はhttp://tinyurl.com/so-hintsを読んで質問を更新してください。 –

+0

質問が更新されました – user49126

答えて

1

あなたが作品を提供されたコードのようなものを試してみて、コレクションにする必要があります。

System.Exception test = new Exception(); 
var methods = test.GetType().UnderlyingSystemType.GetMethods(); 

foreach (var t in methods) 
{ 
    Console.WriteLine(t.Name); 
} 

戻り

get_Message 
get_Data 
GetBaseException 
get_InnerException 
get_TargetSite 
get_StackTrace 
get_HelpLink 
set_HelpLink 
get_Source 
set_Source 
ToString 
GetObjectData 
GetType 
Equals 
GetHashCode 
GetType 

EDIT:

が何をしたいということですか?

Class1 class1 = new Class1(); 
var methodsClass1 = class1.GetType().GetMethods(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); 

BaseClass baseClass = new BaseClass(); 
var methodsBaseClass = baseClass.GetType().GetMethods(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); 

foreach (var t in methodsClass1.Where(z => methodsBaseClass.FirstOrDefault(y => y.Name == z.Name) == null)) 
{ 
    Console.WriteLine(t.Name); 
} 
1

MethodInfo[] methodInfos = 
typeof(MyClass).GetMethods(BindingFlags.Public | 
                 BindingFlags.Static); 
+0

私はこの呼び出しをベースクラスのコンストラクタで行う必要があります –

0
here is an example on how to use reflection to get the Method names 
replace MyObject with your Object/Class 

using System.Reflection; 
MyObject myObject;//The name of the Object 
foreach(MethodInfo method in myObject.GetType().GetMethods()) 
{ 
    Console.WriteLine(method.ToString()); 
} 
0

問題は、BaseClassののコンストラクタで呼び出しているメソッドGetTypeのオーバーライドです。

Class1タイプのインスタンスを作成し、所有しているメソッドを見ると、6つのメソッドすべてが表示されます。

BaseClassタイプのインスタンスを作成すると、4つのメソッド(オブジェクトタイプの4つのメソッド)のみが表示されます。

サブクラスのインスタンスを作成すると、BaseClassでコンストラクターが暗黙的に呼び出されます。 GetType()を使用すると、Class1型のオーバーライドされた仮想メソッドが使用され、期待される応答が返されます。

関連する問題