c# - XNA 的 Vector2 类,属性在尝试更改其值时返回错误

标签 c# properties xna accessor

我首先用一些代码来说明我的问题:

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/

相关文章:

objective-c - 合成的实例变量是作为私有(private)的而不是 protected 生成的吗?

c# - XNA 4.0 将周围的球体/盒子添加到地形

windows-8 - 关于设置 Windows 8 Monogame 项目的最新说明是什么?

c# - 如何在 AutoMapper 中映射阴影属性

c# - 如何将 View 的 BackgroundColor 属性绑定(bind)到 Xamarin Forms 中的 View 模型?

c# - 在 C# 中使用 BeginRead 捕获异常

java - Eclipse 不显示不存在的 Maven 属性

java - 使用外部 .cfg 文件而不是在构建时定义属性文件

c# - XNA:我怎样才能只绘制我的 Sprite 的 "pizza slice"?

c# - 如何选择父级和筛选的子级列表(如果存在)(外连接)