获取并保存变量的当前值而不是指针

时间:2018-06-06 09:16:39

标签: c#

我正在尝试编写基于现有框架(GraphX)的网络可视化软件。对于分组算法,我必须根据手动分配的位置(分配给它们所基于的数据对象)绘制节点,这会导致拖动被禁用。但是,仍然存在一个被拖动的不可见控件,因此我想在绘制节点时使用初始偏移量,以便它们响应拖动不可见节点。

为此,我需要在绘制节点时获取静态变量。我已经尝试了一段时间才能得到它,但我似乎只能得到指针。我尝试了我的手浅拷贝和不安全的代码,但没有运气..

public Point GetStartPosition(bool final = true, bool round = false)
{
    DataVertexControlWFA copy = (DataVertexControlWFA)this.MemberwiseClone();
    return copy.GetPosition();
}

是我希望的方法是对象的当前位置(不可改变)

algPosition = GetPosition();

double x = algPosition.X;
double y = algPosition.Y;

double* StartX;
double* StartY;

StartX = &x;
StartY = &y;

double offset_SourceX = _vertex.Point.X - *StartX;
double offset_SourceY = _vertex.Point.Y - *StartY;

Point position = new Point(algPosition.X + offset_SourceX, algPosition.Y + offset_SourceY);

我希望代码块会导致Star​​tX和StartY的值不变,但没有运气。

1 个答案:

答案 0 :(得分:0)

你可以这样做:

public class Program
{
    // These are C# get-only properties
    // They cannot be assigned a value
    double StartX => algPosition.X;    // Body is called each time the member is read
    double StartY => algPosition.Y;    // Which gives the most up-to-date values 
}

...

algPosition = GetPosition();

double offset_SourceX = _vertex.Point.X - StartX;
double offset_SourceY = _vertex.Point.Y - StartY;

Point position = new Point(algPosition.X + offset_SourceX, algPosition.Y + offset_SourceY);

属性是方法的语法糖。 GetX() => 4;可以成为X => 4;,并且他们的表现也相同。有时,使用看起来的方法更像是一个字段,这就是属性。

GetX()听起来可能会产生一些奇怪的副作用。 X听起来不会,而只是计算一个简单的值。

在此示例中,如果有人尝试执行StartX = foo,则会生成编译警告,因为无法设置它。并非所有属性都是这样的。您可以阅读有关他们的更多信息here.

请注意,这不需要指针,对于值和引用类型也是如此。