Vb.net 如何从另一个类更改一个类的颜色属性?
这有点难以解释,但基本上: 我想从另一个类更改类的Color属性:在本例中,是一个动画类 Form1->包含对象“ShapeClass”->包含“FillColor”和 “位置”属性 AnimatorClass->包含变量“SubjectProperty”,它是 对象,该对象的值在整个动画中更改。潜艇 “run()”将更改“ShapeClass”对象中的值 下面是动画的工作原理:Vb.net 如何从另一个类更改一个类的颜色属性?,vb.net,class,reference,Vb.net,Class,Reference,这有点难以解释,但基本上: 我想从另一个类更改类的Color属性:在本例中,是一个动画类 Form1->包含对象“ShapeClass”->包含“FillColor”和 “位置”属性 AnimatorClass->包含变量“SubjectProperty”,它是 对象,该对象的值在整个动画中更改。潜艇 “run()”将更改“ShapeClass”对象中的值 下面是动画的工作原理: Dim Shape1 as ShapeClass = new ShapeClass() Dim anim as An
Dim Shape1 as ShapeClass = new ShapeClass()
Dim anim as AnimatorClass = new AnimatorClass()
anim.SubjectProperty = Shape1.Position
anim.run()
动画将成功运行:实际更改Shape1对象的位置属性
但是,只要将Drawing.Color用作SubjectObject,Shape1.FillColor中的实际值就不会更改。在所有其他情况下,SubjectProperty变量似乎是对ShapeClass中实际属性的引用,如果要更改SubjectProperty,请转到它引用的属性,但在Drawing.Color类中似乎不会发生这种情况 有人能告诉我为什么会这样,以及如何解决它吗?谢谢
(如果我解释得不好的话,那就是道歉)您看到的问题很可能是引用类型和值类型之间的差异。
位置的类型是什么?另外,向我们展示实际修改SubjectProperty
内容的代码“Drawing.Color类似乎不会发生这种情况”。这是因为Drawing.Color
不是一个类。它是一种结构,即一种值类型。将值类型从一个位置指定到另一个位置将创建副本,而指定引用类型将创建对同一对象的另一个引用。一旦您提供了更多的信息,以便我们确定发生了什么,我们可能会提供一个解决方案。想到的是使用Refelection并传入一个PropertyInfo
对象,您可以在该对象上调用SetValue
。LINQ可能也能帮上忙。我无法真正显示代码,因为我的实际代码大约有300行,基本上不可能缩小范围。我可能应该包括Position
是一个类,它存储x和y位置。这些细节其实并不重要,只是它是一个用来描述形状位置的类。调用run()时,代码基本上是这样做的:SubjectProperty=Value
@jmcilhinney:谢谢你指出了那幅画。颜色是一种结构,我真的不知道。我会看看反射和LINQ,尽管我有一个很快的问题:VB.NET中的反射与C++中的指针变量是否相似?不,反射不会像指针那样。基本上,您必须为要设置的属性创建一个PropertyInfo
,然后将其与要设置它的对象一起传递。然后调用属性信息的SetValue
方法,并传递要设置属性的对象和要设置属性的值。