【发布时间】:2016-06-19 01:54:30
【问题描述】:
我对 C# 还很陌生,但我仍在搞清楚。 我的问题是我有这样的课程:
class Sprite {
private Vector3 _position;
public Vector3 Position {
get { return _position; }
set { _position = value;
HandleEvent(); }
}
public Sprite() {
_position = new Vector3();
}
}
带有一个 Vector3 对象和一个 get/set 块。 这是 Vector3 结构的简化版本:
struct Vector3 {
float X, Y, Z;
}
现在我的问题是,如果我这样做:
Sprite sprite = new Sprite();
sprite.Position.X += 4.0F;
它给了我一个错误,因为 Position 不是一个变量,而是一个 getter 给我的。但是我不想公开 _position,因为我想在变量更改时处理一个事件。
(在 Java 中这很完美,这就是我感到困惑的原因:/)
你能告诉我我做错了什么或者你会做些什么不同的事情吗?
编辑:
是的,Vector3 是一个结构而不是一个类。很抱歉造成混乱,但我对 C# 还是很陌生。
【问题讨论】:
-
你能把错误信息贴出来吗?这应该有效。
-
你确定 Vector3 是一个类而不是一个结构吗?
-
在发布的代码中看不到任何错误。一定还有其他内容您没有发布。
-
你能给我们看看 Vector3 类的代码吗? Vector3 类通常设计为具有只读属性的不可变类型,以实现并行性/线程安全。我怀疑问题出在 Position 属性上,因为这不是您要设置的。
-
你需要这样做:
var temp = sprite.Position; temp.X = 4.0F; sprite.Position = temp;