首页 > 解决方案 > 获取和保存变量的当前值而不是指针

问题描述

我正在尝试基于现有框架(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);

是一段代码,我希望会导致 StartX 和 StartY 的值不变,但没有运气。

标签: c#

解决方案


你可以这样做:

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在这个例子中,如果有人因为无法设置而尝试这样做,则会生成一个编译警告。不是所有的属性都是这样的。你可以在这里阅读更多关于它们的信息。

请注意,这不需要指针,并且适用于值和引用类型。


推荐阅读