C#Getter/Setter问题

sla*_*rIQ 3 c# field getter-setter

假设我在课堂上有一个属性:

Vector3 position{get; set;}
Run Code Online (Sandbox Code Playgroud)

所以我在某处创建了该类的实例,现在我想改变position.x,现在这是不可能的,因为getter和setter设置并得到整个对象.所以我必须让一个临时的Vector3改变它的值,然后分配它.

通常情况下,我会将位置设为公共领域,以便解决问题.但是我不能在这种情况下这样做,因为position是接口的实现,接口不能有字段.

那么我怎样才能以最好的方式解决这个问题.

编辑:Vector3是一个结构,所以它是一个值类型

Eri*_*ert 9

这种直截了当的解决方案是否不可接受?

foo.position = new Vector(newX, foo.position.Y, foo.position.Z);
Run Code Online (Sandbox Code Playgroud)

这有什么问题?这看起来非常简单.


Mar*_*ell 5

IMO,这里最简单的答案:

private Vector3 position;
public Vector3 Position {
    get {return position;}
    set {position = value;} // with @Mehrdad's optimisation
}
public float X {
    get {return position.X;}
    set {position.X = value;}
}
public float Y {
    get {return position.Y;}
    set {position.Y = value;}
}
public float Z {
    get {return position.Z;}
    set {position.Z = value;}
}
Run Code Online (Sandbox Code Playgroud)

现在你可以改变obj.X,obj.Y而且obj.Z如果你只需要改变一个维度,或者改变obj.Position改变一切.

如果您需要名称position来实现接口,那么请明确地执行:

Vector3 IWhateverInterface.position {
    get {return position;}
    set {position = value;}
}
Run Code Online (Sandbox Code Playgroud)