假設我有一個名爲foo的類,它有3個公共成員foo1,foo2和foo3。,有沒有辦法在運行時確定類的成員?
現在假設我正在編寫一個將foo類的實例作爲參數的函數,但是當我寫這個函數時,我不知道它具有哪些公共成員。
有沒有一種方法可以讓我在運行時確定它有公共成員foo1,foo2,foo3 和僅有 foo1,foo2,foo3。 IE瀏覽器 - 找出所有公衆成員是什麼?
而且我也可以確定它們的類型嗎?
假設我有一個名爲foo的類,它有3個公共成員foo1,foo2和foo3。,有沒有辦法在運行時確定類的成員?
現在假設我正在編寫一個將foo類的實例作爲參數的函數,但是當我寫這個函數時,我不知道它具有哪些公共成員。
有沒有一種方法可以讓我在運行時確定它有公共成員foo1,foo2,foo3 和僅有 foo1,foo2,foo3。 IE瀏覽器 - 找出所有公衆成員是什麼?
而且我也可以確定它們的類型嗎?
您可以使用反射:
// List all public properties for the given type
PropertyInfo[] properties = foo.GetType().GetProperties();
foreach (var property in properties)
{
string propertyName = property.Name;
}
你應該知道,使用反射時,因爲類型是在運行時評估有可能是一個額外的開銷。
看一看在.NET反射命名空間:
http://msdn.microsoft.com/en-us/library/ms173183(VS.80).aspx
嗯,這是反思是有什麼:
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
這是反思的工作。看看類似的方法:
myFoo.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public);
這將返回該類型具有所有的公共,實例方法。然後,您可以查看返回的結果並確定此類是否符合您的標準。有相當的方法,以及其他類型的成員,如GetFields(...)
,GetProperties(...)
等
基本上你想知道Type
類,這是C#的反射功能的核心。
foreach(PropertyInfo pi in yourObject.GetType().GetProperties())
{
Type theType = pi.PropertyType;
}
上MSDN下面的文章應該可以幫助您確定一個類型的方法