預P.S。:看了太晚,Vector3
是一個值類型;因此下面的文章不會有太大的幫助。對不起,這個錯誤。
好,而接口不能有田,他們可以有屬性,如:
interface IVector3
{
double X { get; set; }
double Y { get; set; }
double Z { get; set; }
}
在你Vector3
,你只是實現這些和其他事物一樣:
class Vector3 : IVector3
{
double IVector3.X
{
get { ... }
set { ... }
}
...
}
現在回到到您的position
財產。您在初始化過程中配合的財產,以一個固定的實例,並只提供一個getter:
Vector3 position
{
get
{
return _position;
}
}
private Vector3 _position = new Vector3(...);
通過使只讀(即沒有setter)的屬性,可以確保它不會用新Vector3
更換目的。相反,您可以在初始化時將其與固定實例(_position
)綁定。但是,您可以通過將新值分配給position.X
,position.Y
或position.Z
來更改Vector3
。
是的,這是我的想法,但就像我在上面的評論中解釋的位置將被修改分配,所以這是最有效的方式?閱讀答案,我認爲這是唯一的方法,我是對的嗎? – slayerIQ 2010-01-17 22:40:20
這與提供方法基本相同。可能的微優化是避免使用'Position'的自動屬性並直接修改'X'屬性中的'position.X'。 – 2010-01-17 22:41:48
@slayerIQ你必須選擇你的戰鬥。如果這是問題,你可以*只暴露'position'作爲字段,並根據我在最後添加的位做顯式接口實現? – 2010-01-17 22:42:27