假设我有一个名为foo的类,它有3个公共成员foo1,foo2和foo3。
现在假设我正在编写一个函数,它将类foo的实例作为参数,但是当我编写这个函数时,我不知道它有哪些公共成员。
我有办法在运行时确定它有公共成员foo1,foo2,foo3 和ONLY foo1,foo2,foo3。 IE - 找出所有公众成员是什么?
我还可以确定他们的类型吗?
答案 0 :(得分: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
答案 1 :(得分:3)
你可以使用反射:
// List all public properties for the given type
PropertyInfo[] properties = foo.GetType().GetProperties();
foreach (var property in properties)
{
string propertyName = property.Name;
}
您应该知道在使用反射时可能会有额外的开销,因为在运行时会计算类型。
答案 2 :(得分:2)
答案 3 :(得分:2)
这是反思的工作。研究如下方法:
myFoo.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public);
这将返回该类型具有的所有公共实例方法。然后,您可以查看返回的结果并确定此类是否符合您的条件。其他类型的成员也有相同的方法,例如GetFields(...)
,GetProperties(...)
等。
基本上你想要了解Type
类,这是C#反射功能的核心。
答案 4 :(得分:0)
foreach(PropertyInfo pi in yourObject.GetType().GetProperties())
{
Type theType = pi.PropertyType;
}
答案 5 :(得分:0)
关于MSDN的以下文章应该可以帮助您确定类型的方法