一个类有一个字段。第二类应该能够引用该字段并对其进行更改。由于您无法获取内存中的字段地址,因此我必须使用反射。但是我的方法只适用于非封装字段。所以基本上:字段参考和反思
这工作:
public class Dummy
{
public int field;
public Dummy(int value)
{
this.field = value;
}
}
class Program
{
public static void Main()
{
Dummy d = new Dummy(20);
//Shows 20
Console.WriteLine(d.field.ToString());
d.GetType().GetField("field", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).SetValue(d, 40);
//It should show 40 now
Console.WriteLine(d.field.ToString());
}
}
这不(抛出的NullReferenceException):
public class Dummy
{
public int field { get; set; }
public Dummy(int value)
{
this.field = value;
}
}
class Program
{
public static void Main()
{
Dummy d = new Dummy(20);
//Shows 20
Console.WriteLine(d.field.ToString());
d.GetType().GetField("field", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).SetValue(d, 40);
//It should show 40 now
Console.WriteLine(d.field.ToString());
}
}
为什么?我如何解决它?我可以访问像这样封装的对象吗?谢谢!
在你的第二个例子中,这不是'field',它是一个'property'。 – EkoostikMartin
为什么你需要在这里反思? 'field'和'property'都是公开的,所以'd.field = 40;'... – Alden
这只是一个愚蠢的例子。你显然不需要在这里反思。 – JTaylor