我正在尝试编写基于现有框架(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的值不变,但没有运气。
答案 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.
请注意,这不需要指针,对于值和引用类型也是如此。