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);
是一段代码,我希望会导致 StartX 和 StartY 的值不变,但没有运气。
解决方案
你可以这样做:
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
在这个例子中,如果有人因为无法设置而尝试这样做,则会生成一个编译警告。不是所有的属性都是这样的。你可以在这里阅读更多关于它们的信息。
请注意,这不需要指针,并且适用于值和引用类型。
推荐阅读
- google-bigquery - 谷歌:Bigquery 没有从特定 google-drive-sheet1 导入的选项
- dialogflow-es - 如果你想为谷歌操作制作游戏,你会如何开始
- python - pandas.DataFrame 构造函数中不允许元组的元组
- c# - 如何使用 Mono Project 将 C/C++ 指针传递和保存到 C#,并将它们返回
- process - What is the difference between "time overrun" and "time limit exceeded"?
- python-3.x - 如何使用 sha256 散列变量
- node.js - 运行 docker push 到 ECR 时找不到 Docker 映像
- python-3.x - groupby 后无法将对象转换为日期
- angular - AngularFireAuth用电子邮件创建用户而不登录他
- python - 对 pandas 数据框的索引查找。为什么这么慢?如何加快速度?