我想知道你如何建议设计一个类,因为XNA Framework在整个地方都使用了Struct?
例如,一个spite类,可能需要在类外部访问Vector2和Rectangle(都定义为Struct)。
当您尝试编写如下代码时会出现问题:
class Item
{
public Vector2 Position {get; set;}
public Item() { Position = new Vector2(5,5); }
}
Item i = new Item();
i.Positon.X = 20; // fails with error 'Cannot modify the return value of Item because it is not a variable.'
// you must write code like this
var pos = i.Position;
pos.X++;
i.Position = pos;
第二个选项可以编译并运行,但它只是难看。还有更好的方法吗?
答案 0 :(得分:6)
或者,只是把它扔出去......只是露出场地。暴露公共领域没有任何内在错误。
例如,如果您的实体为其位置公开了一个Vector3,以便其他东西可以在自己的计算中使用该值...只需公开它即可。否则,如果没有其他类或实体需要知道该位置,请不要暴露它: - )
以下是来自Rico Mariani的一些圣人建议:
一般来说,我的感觉是属性被高估了,而且这些领域的利用率极低。我是否提到不是每个人都同意这个立场? :)
答案 1 :(得分:5)
在项目类中添加一个方法,例如:
public void Move(int xAmount, int yAmount)
{
var newPosition = new Point(this.Position.X + xAmount, this.Position.Y + yAmount);
this.Position = newPosition;
}
这样丑陋很好并且抽象化,所以你可以像这样调用方法:
i.Move(1,1)
将它向下移动到右边的一个像素。您可以使用此方法的变体,例如MoveRight()
MoveLeft()
等。
答案 2 :(得分:3)
你也可以抽象出struct
:
private Vector2 position;
public float X
{
get
{
return position.X;
}
set
{
position.X = value;
}
}
并像这样使用它:
Item i = new Item();
i.X = 20;