如何在我的班级中引用“自动”属性?

时间:2010-12-23 23:00:16

标签: c# xna

我正在关注的教程(http://www.bluerosegames.com/xna101/post/Lesson-9-Improving-the-BouncingBall-Class-Using-Properties.aspx

private Vector2 _position;
public Vector2 Position
{
    get

    {
        return _position;
    }
    set
    {
        _position = value;
    }
}

不使用代码中的自动属性功能。我想使用自动属性跳过大部分输入,但我后来在代码中遇到问题。我评论了受影响的下面几行。

public Vector2 Position { get; set; }

    public void Update()
    {
        Position = Position + Velocity;

        if (Position.X < 0 || Position.X > GraphicsViewport.Width - Texture.Width)
        {
            // If we get in here, we've hit a vertical wall
            Velocity.X = -Velocity.X; // doesn't work
            Position.X = Position.X + Velocity.X; // doesn't work
        }
        if (Position.Y < 0 || Position.Y > GraphicsViewport.Height - Texture.Height)
        {
            // If we get in here, we've hit a horizontal wall
            Velocity.Y = -Velocity.Y; // doesn't work
            Position.Y = Position.Y + Velocity.Y; // doesn't work
        } 
    }

我在Visual Studio中遇到的错误声明“无法修改WindowsGame1.BouncingBall.Position的返回值,因为它不是变量。”那么如何让代码使用自动属性呢?

谢谢! 约翰

1 个答案:

答案 0 :(得分:5)

您的确切问题已经asked and answered

  

这段代码并没有试图做你的事   认为它正在努力......

     

Vector2是一个结构,所以你的调用   首先更新副本位置   堆栈,将velocity.X添加到新的   Vector2的'X'然后扔掉它。   原始值从未被修改过。

     

C#编译器捕获了你的错误   在这种情况下(p!)。你反而需要   要做:

     

位置=新   Vector2(Position.X + velocity.X,   Position.Y);

     

价值与价值之间的差异   引用类型是C#的基础 -   C#规范描述了这一点   “你好之后”   世界“

     

参见C#8.2节   规范了解更多信息:

     

http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf

     

Alun Harford