如何获得当前班级的领域?

时间:2011-08-23 14:29:10

标签: c# .net reflection

我正在尝试获取当前类的字段。我让类实现了ICloneable接口。

clone()内,以下行似乎找不到任何字段。为什么呢?

foreach (FieldInfo fi in this.GetType().GetFields())
{
}

非常感谢,

5 个答案:

答案 0 :(得分:2)

那只能找到公共领域。看看BindingFlags

要建议更好的方法,只需调用MemberwiseClone,它将复制当前类/实例中的所有字段值。

答案 1 :(得分:1)

因为默认情况下只返回公共字段。使用BindingFlags.NonPublic的其他重载。

答案 2 :(得分:0)

答案 3 :(得分:0)

使用BindingFlags

var flags = BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.Public;
foreach (FieldInfo fi in this.GetType().GetFields(flags))
{
   //...
}

答案 4 :(得分:0)

GetFields为空的唯一原因是“没有为当前类型定义公共字段”(来自MSDN)。

更一般地说,您是否知道Object类中已经存在已经执行了您正在尝试执行的操作的受保护方法(浅层副本)?它被称为MemberwiseClone

您可以像这样使用它:

public object Clone()
{
    return MemberWiseClone();
}