如果我只是愚蠢的话,我对编程很新,对我这么光鲜!谢谢^ _ ^
我将首先用一些代码说明我的问题:
class ExampleClass
{
private Vector2 _myVector;
public Vector2 MyVectorProperty { get { return _myVector; } set { _myVector = value; } }
private void MyMethod()
{
_myVector = Vector2.Zero; // Setting to zero
MyVectorProperty.X = 5; //Cannot modify the expression because it is not a variable (returns an error)
_myVector.X = 5; //Works fine!
}
}
正如您所看到的,当尝试使用属性更改向量上的X和Y的值时,我收到错误“无法修改表达式,因为它不是变量”。我不确定为什么会发生这种情况,并且没有任何运气在网上看,我想知道为什么这是以及如何(如果)我能解决它?
另一个子问题,在他们所属的类中工作时使用公共属性或私有/受保护字段是否是良好的编程习惯?
非常感谢! < 3
答案 0 :(得分:4)
你应该很高兴编译器不允许你这样做,否则你会对操作失败的结果感到惊讶。
MyVectorProperty
是属性 - 这意味着获取值是调用返回值的函数(类似this.get_MyVectorProperty()
)。MyVectorProperty
的类型是Vector2,它是结构,它意味着get_...
函数返回的值是值的副本,而不是正常类的情况下的引用。X
只会更改值副本中的X,并且由于该值的副本未分配给任何内容,因此会丢失。答案 1 :(得分:1)
Vector2
是一个结构(值类型),因此您的属性返回_myVector
的值(即副本),您无法更改它。