[C#.NET][VB.NET] 如何 列舉 類別中的成員
1.Type 類別,可以提供我們類別中的型別定義,C# 的 typeof 運算子、C++ 的 typeid 運算子與 Visual Basic 的 GetType 運算子,都可取得型別的 Type 物件。以下提供了三個簡單取得類型的方法。
//取得類別型別
//法一
Type myType = Type.GetType(myTypeName);
//法二
myType = typeof(System.Windows.Forms.Button);
//法三
System.Windows.Forms.TreeView MyTreeView = new TreeView();
Type myType = MyTreeView.GetType();
Assembly 類別,Module 類別 可以讓我們取得相關物件的型別資訊,利用這兩個類別也可以撈到其他的東西,下篇再來討論。
2.MemberInfo 類別 提供我們取得類別的成員資訊
3.觀察使用 GetMembers 方法取得類別的成員們
4.MemberTypes 列舉型別可以判斷成員們的屬性
5.FindMembers 方法也可以找出型別中的成員
以下範例需要匯入
如何列舉類別中所有的成員
法一:
//1.取得類別型別
//法一
Type myType = Type.GetType(myTypeName);
//法二
myType = typeof(System.Windows.Forms.Button);
string myInfo = myType.ToString() + " 成員包括:" + System.Environment.NewLine;
if (myType != null)
{
try
{
//2.取得所有成員資訊
MemberInfo[] MemberInfos = myType.GetMembers();
//Assembly myAssembly = myType.Assembly;
//Module ModuleInfos = myType.Module;
//3.列舉所有成員資訊
foreach (MemberInfo myMemberInfo in MemberInfos)
{
switch (myMemberInfo.MemberType)
{
case MemberTypes.All:
myInfo += "All " + "\t";
break;
case MemberTypes.Constructor:
myInfo += "Constructor " + "\t";//建構函數
break;
case MemberTypes.Custom:
myInfo += "Custom " + "\t";//自訂
break;
case MemberTypes.Event:
myInfo += "Event " + "\t";
break;
case MemberTypes.Field:
myInfo += "Field " + "\t";
break;
case MemberTypes.Method:
myInfo += "Method " + "\t";
break;
case MemberTypes.NestedType:
myInfo += "NestedType " + "\t";
break;
case MemberTypes.Property:
myInfo += "Property " + "\t";
break;
case MemberTypes.TypeInfo:
myInfo += "TypeInfo " + "\t";
break;
}
myInfo += ":" + myMemberInfo.ToString() + System.Environment.NewLine;
}
myInfo += myType.ToString() + " 的命名空間為:" + System.Environment.NewLine;
myInfo += myType.Namespace + System.Environment.NewLine;
myInfo += myType.Module + System.Environment.NewLine;
textBox2.Text = myInfo;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
Type myType = typeof(System.Threading.Thread);
string myInfo = myType.FullName + " 成員包括:" + System.Environment.NewLine;
//2.列舉所有成員
foreach (MemberInfo mi in myType.GetMembers())
{
myInfo += String.Format("{0} : {1}\n", mi.MemberType, mi) + System.Environment.NewLine;
}
textBox2.Text = myInfo;
如何列舉類別中的事件成員
string myInfo = myTypeName + "的公共事件包括:" + System.Environment.NewLine;
//1.類別實體化
System.Windows.Forms.TreeView MyTreeView = new TreeView();
//2.取得類別的型別
Type myType = MyTreeView.GetType();
if (myType != null)
{
try
{
//3.取得型別的事件成員
MemberInfo[] MyMemberInfos = myType.FindMembers(MemberTypes.Event, BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance, null, null);
for (int i = 0; i < MyMemberInfos.Length; i++)
{
myInfo += MyMemberInfos[i].ToString() + System.Environment.NewLine;
}
textBox2.Text = myInfo;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
範例下載:
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET