如何将存储为对象存储的反射属性值设置



我想设置反射对象的属性的值,但我无法参考对象本身。我将属性存储为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周围的包装器,以便更改内部变量。一般来说,这样做的需要表明您可能没有正确的做法。

相关内容

  • 没有找到相关文章

最新更新