Pre-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
собственности. Вы связываете свойство с фиксированным экземпляром во время инициализации и предоставляете только геттер:
Vector3 position
{
get
{
return _position;
}
}
private Vector3 _position = new Vector3(...);
Делая свойство доступным только для чтения (т. Е. Без установщика), вы гарантируете, что оно не будет заменено новым Vector3
объектом. Вместо этого вы привязываете его к фиксированному экземпляру (_position
) во время инициализации. Но вы можете изменить Vector3
, присвоив новые значения position.X
, position.Y
или position.Z
.