我首先用一些代码来说明我的问题:
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 值时,出现错误“无法修改表达式,因为它不是变量”。我不确定为什么会发生这种情况,并且在网上没有找到任何运气,我想知道这是为什么以及如何(如果)我可以修复它?
另一个子问题,在它们所属的类中工作时使用公共(public)属性或私有(private)/ protected 字段是良好的编程习惯吗?
最佳答案
你应该庆幸编译器不允许你这样做,否则你会对操作结果丢失感到非常惊讶。
MyVectorProperty
是属性 - 这意味着获取值是调用返回值的函数(类似于this.get_MyVectorProperty()
)。- 由于
MyVectorProperty
的类型是 Vector2,它是结构体,这意味着get_...
函数返回的值是值的副本,而不是像它那样的引用正常类的情况下。 - 更改上述副本的字段
X
只会更改值副本内的 X,并且由于该值的副本未分配给任何内容,因此它将丢失。
关于c# - XNA 的 Vector2 类,属性在尝试更改其值时返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11129581/