2010-07-07 115 views
3

假設我有一個名爲foo的類,它有3個公共成員foo1,foo2和foo3。,有沒有辦法在運行時確定類的成員?

現在假設我正在編寫一個將foo類的實例作爲參數的函數,但是當我寫這個函數時,我不知道它具有哪些公共成員。

有沒有一種方法可以讓我在運行時確定它有公共成員foo1,foo2,foo3 和僅有 foo1,foo2,foo3。 IE瀏覽器 - 找出所有公衆成員是什麼?

而且我也可以確定它們的類型嗎?

回答

3

您可以使用反射:

// List all public properties for the given type 
PropertyInfo[] properties = foo.GetType().GetProperties(); 
foreach (var property in properties) 
{ 
    string propertyName = property.Name; 
} 

你應該知道,使用反射時,因爲類型是在運行時評估有可能是一個額外的開銷。

6

嗯,這是反思是有什麼:

Type myObjectType = typeof(foo); 

System.Reflection.FieldInfo[] fieldInfo = myObjectType.GetFields(); 
foreach (System.Reflection.FieldInfo info in fieldInfo) 
    Console.WriteLine(info.Name); // or whatever you desire to do with it 
2

這是反思的工作。看看類似的方法:

myFoo.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public);

這將返回該類型具有所有的公共,實例方法。然後,您可以查看返回的結果並確定此類是否符合您的標準。有相當的方法,以及其他類型的成員,如GetFields(...)GetProperties(...)

基本上你想知道Type類,這是C#的反射功能的核心。

0
foreach(PropertyInfo pi in yourObject.GetType().GetProperties()) 
{ 
    Type theType = pi.PropertyType; 
} 
相關問題