说我有课:
public class TestClass
{
public String Str1;
public String Str2;
private String Str3;
public String Str4 { get { return Str3; } }
public TestClass()
{
Str1 = Str2 = Str 3 = "Test String";
}
}
有没有办法(C#.NET 2)迭代Class'TestClass'并打印出公共变量和属性?
记得.Net2
谢谢
答案 0 :(得分:9)
迭代公共实例属性:
Type classType = typeof(TestClass);
foreach(PropertyInfo property in classType.GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
Console.WriteLine(property.Name);
}
迭代公共实例字段:
Type classType = typeof(TestClass);
foreach(FieldInfo field in classType.GetFields(BindingFlags.Public | BindingFlags.Instance))
{
Console.WriteLine(field.Name);
}
如果您还想要包含非公开媒体资源,请将BindingFlags.NonPublic
添加到GetProperties
和GetFields
的参数中。
答案 1 :(得分:1)
您可以使用reflection
TestClass sample = new TestClass();
BindingFlags flags = BindingFlags.Instance |
BindingFlags.Public | BindingFlags.NonPublic;
foreach (FieldInfo f in sample.GetType().GetFields(flags))
Console.WriteLine("{0} = {1}", f.Name, f.GetValue(sample));
foreach (PropertyInfo p in sample.GetType().GetProperties(flags))
Console.WriteLine("{0} = {1}", p.Name, p.GetValue(sample, null));
答案 2 :(得分:1)
您可以使用reflection执行此操作。
以下是使用反射进行扩展的an article。
答案 3 :(得分:0)
要获取我们将使用的类型的属性:
Type classType = typeof(TestClass);
PropertyInfo[] properties = classType.GetProperties(BindingFlags.Public | BindingFlags.Instance);
要获取我们将使用的类定义的属性:
Type classType = typeof(TestClass);
object[] attributes = classType.GetCustomAttributes(false);
传递的布尔标志是继承标志,是否在继承链中搜索。
要获取我们将使用的属性的属性:
propertyInfo.GetCustomAttributes(false);
使用上面给出的哈佛代码:
Type classType = typeof(TestClass);
object[] classAttributes = classType.GetCustomAttributes(false);
foreach(PropertyInfo property in classType.GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
object[] propertyAttributes = property.GetCustomAttributes(false);
Console.WriteLine(property.Name);
}