假设我有一个名为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下面的文章应该可以帮助您确定一个类型的方法