2010-07-07 61 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; 
} 
相关问题