如何设置存储为对象的反射 属性 值?
How to set reflected property value stored as object?
我想为反射对象设置一个 属性 的值,但我不能引用对象本身。我将 属性 存储为 System.object
- 仅此而已。
class Painting
{
public System.Color PaintingColor;
{
get { return m_color; }
set { m_color = value; }
}
}
基于示例 - 我有一个 System.Color
类型的对象,它实际上是我通过反射创建的 Painting
的 属性 值。我想做:
object pnt = //initialized with Activator.CreateInstance
pnt.GetType().GetProperty("PaintingColor").SetValue(pnt, Color.Black);
但是,由于我正在使用递归,我只有:
object clr = pnt.GetType().GetProperty("PaintingColor").GetValue();
无法访问 pnt
。是否可以更改 clr
,使其实际上更改 pnt
的 属性 值?显然,clr = Color.Black
不起作用。
您在代码中得到的只是 属性 的实际值;不是您可以用来实际分配它的引用或指针。
如果您获得的值是可变的,那么您可以更改该对象的属性 ,它会传播,但这不适用于 System.Color
。
如果您确实需要这样做,我建议将 属性 更改为 System.Color
周围的包装器,以便您可以更改内部变量。不过一般来说,需要这样做表明您可能做得不对。
我想为反射对象设置一个 属性 的值,但我不能引用对象本身。我将 属性 存储为 System.object
- 仅此而已。
class Painting
{
public System.Color PaintingColor;
{
get { return m_color; }
set { m_color = value; }
}
}
基于示例 - 我有一个 System.Color
类型的对象,它实际上是我通过反射创建的 Painting
的 属性 值。我想做:
object pnt = //initialized with Activator.CreateInstance
pnt.GetType().GetProperty("PaintingColor").SetValue(pnt, Color.Black);
但是,由于我正在使用递归,我只有:
object clr = pnt.GetType().GetProperty("PaintingColor").GetValue();
无法访问 pnt
。是否可以更改 clr
,使其实际上更改 pnt
的 属性 值?显然,clr = Color.Black
不起作用。
您在代码中得到的只是 属性 的实际值;不是您可以用来实际分配它的引用或指针。
如果您获得的值是可变的,那么您可以更改该对象的属性 ,它会传播,但这不适用于 System.Color
。
如果您确实需要这样做,我建议将 属性 更改为 System.Color
周围的包装器,以便您可以更改内部变量。不过一般来说,需要这样做表明您可能做得不对。