是否可以在同一个类的某些对象之间共享一些变量,以便在一个对象中更改值时,另一个对象中的值也会更改?静态变量在这种情况下不起作用,因为可能有2个对象都有一些相关变量,另外2个对象有不同的相关变量。
例如,假设我有4个正方形排列成一个大正方形,正方形坐标位于x,y,z平面。当4个方格在一起时,它们都会有一个位于最大方块中心的点。
假装这个方格也有一个z坐标。现在,正方形将共享位于中心的点。左上角正方形的右下角,右上角正方形的左下角等都将具有相同的(x,y,z)值。
现在我想要的是,如果一个方格的z值发生变化,它们都会在没有任何额外代码的情况下发生变化,就像它们都指向相同的内存位置一样,所以它们在某种意义上“自动”更新。 / p>
这样的事情可能吗?
答案 0 :(得分:3)
我认为你正在以错误的方式思考这个问题。如果要将所有正方形视为逻辑上的一个对象,请创建一个封装所有正方形的对象并提供所需的逻辑。你不应该让对象偷偷地改变其背后的其他对象的价值观,IMO。
答案 1 :(得分:3)
这是你可以做到这一点的一种方法。每个方块的数据属性都指向相同的引用。
class Square
{
private SharedData Data;
public Square(SharedData data)
{
this.Data = data;
}
}
class SharedData
{
public double Z { get; set; }
}
SharedData data = new SharedData() { Z = 100.0 }
Square topLeft = new Square(data);
Square topRight = new Square(data);
Square bottomLeft = new Square(data);
Square bottomRight = new Square(data);
如果您愿意,可以将SharedData
置于提供对方块的只读访问权限的界面后面。如果方块不应该修改Z的值,那么这将是一种更安全的方法。
interface IReadOnlyData
{
double GetZ();
}
class SharedData : IReadOnlyData
{
public double Z { get; set; }
IReadOnlyData.GetZ() { return Z; }
}
class Square
{
private IReadOnlyData Data;
public Square(IReadOnlyData data)
{
this.Data = data;
}
}
答案 2 :(得分:1)