sla*_*rIQ 3 c# field getter-setter
假设我在课堂上有一个属性:
Vector3 position{get; set;}
Run Code Online (Sandbox Code Playgroud)
所以我在某处创建了该类的实例,现在我想改变position.x,现在这是不可能的,因为getter和setter设置并得到整个对象.所以我必须让一个临时的Vector3改变它的值,然后分配它.
通常情况下,我会将位置设为公共领域,以便解决问题.但是我不能在这种情况下这样做,因为position是接口的实现,接口不能有字段.
那么我怎样才能以最好的方式解决这个问题.
编辑:Vector3是一个结构,所以它是一个值类型
这种直截了当的解决方案是否不可接受?
foo.position = new Vector(newX, foo.position.Y, foo.position.Z);
Run Code Online (Sandbox Code Playgroud)
这有什么问题?这看起来非常简单.
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)
| 归档时间: |
|
| 查看次数: |
5477 次 |
| 最近记录: |