すべてのメンバを取得するにはTypeクラスの GetMembersメソッドを使用します。
ここでの「すべてのメンバ」とは、メソッド、プロパティ、フィールドなどを指します。
例えば、以下のようなTestClassというクラスがあるとします。
VBの例
Public Class TestClass
' フィールド
Private _testProperty As String
''' <summary>
''' コンストラクタ
''' </summary>
''' <remarks></remarks>
Public Sub New()
End Sub
''' <summary>
''' プロパティ
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property TestProperty() As String
Get
Return _testProperty
End Get
Set(ByVal value As String)
_testProperty = value
End Set
End Property
''' <summary>
''' メソッド
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Function TestMethod() As Boolean
Return True
End Function
End Class
C#の例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ReflectionCS
{
class TestClass
{
// フィールド
private string _testField = string.Empty;
/// <summary>
/// コンストラクタ
/// </summary>
public TestClass()
{
}
/// <summary>
/// プロパティ
/// </summary>
public string TestProperty
{
get
{
return _testField;
}
set
{
_testField = value;
}
}
/// <summary>
/// メソッド
/// </summary>
/// <returns></returns>
public bool TestMethod()
{
return true;
}
}
}
上記クラスのメンバ情報を取得するには、以下のようなコードを書きます。
VBの例
Sub Main()
Dim t As Type = GetType(ReflectionVB.TestClass)
'メンバを取得する
Dim members As MemberInfo() = t.GetMembers( _
BindingFlags.Public Or BindingFlags.NonPublic Or _
BindingFlags.Instance Or BindingFlags.Static Or _
BindingFlags.DeclaredOnly)
For Each m As MemberInfo In members
Console.WriteLine("{0}", m.Name)
Next
Console.ReadLine()
End Sub
C#の例
static void Main(string[] args)
{
////TestClass tc = new TestClass();
////tc.DispInfo();
//var asm = Assembly.GetExecutingAssembly();
//// アセンブリのバージョンを取得
//var version = asm.GetName().Version;
//Console.WriteLine(version);
Type type = typeof(ReflectionCS.TestClass);
//メンバを取得する
MemberInfo[] members = type.GetMembers(
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.Static |
BindingFlags.DeclaredOnly);
foreach (MemberInfo mb in members)
{
Console.WriteLine("{0}", mb.Name);
}
Console.ReadLine();
}
GetMembersのメソッドに指定可能な BindingFlagsは以下の通りです。
この BindingFlagsにより、取得したいメンバを決定することができます。
| メンバ | 説明 |
| Public | パブリックメンバ |
| NonPublic | 非パブリックメンバ |
| Instance | インスタンスメンバ |
| Static | 静的メンバ |
| DeclaredOnly | 継承メンバーを除外 |
実行例は以下の通りです。
実行例の
get_TestProperty、set_TestPropertyはプロパティ内にあるゲッターとセッターを表しています。
TestMethodは、クラス内にあるメソッド名です。
.ctorというのは、コンストラクタです。
TestPropertyは、クラス内にあるプロパティ名です。
_testPropertyは、クラス内にあるフィールドです。
このように、GetMembersメソッドを使用することで、すべてのメンバーを取得することができます。
最後に、メンバーのタイプも表示するようにコードを修正してみましょう。
For Each(C#はforeach)を以下のように書き換えてください。
m.MemberTypeがメンバーのタイプを表します。
VBの例
For Each m As MemberInfo In members
Console.WriteLine("{0}:{1}", m.MemberType, m.Name)
Next
C#の例
foreach (MemberInfo mb in members)
{
Console.WriteLine("{0}:{1}", mb.MemberType, mb.Name);
}
実行例は以下の通りです。
Please follow and like us:


コメント