【发布时间】:2012-03-23 23:14:05
【问题描述】:
我是 C# 新手。我来自Java世界。所以我对以下代码感到困惑:
class A
{
private PointF point;
public A(PointF point)
{
this.point = point;
}
public PointF Position
{
get { return point; }
}
}
我想改变位置属性的X坐标,所以我执行:
A a = new A(new PointF(1,2));
PointF p = a.Position;
p.X = 100;
Console.WriteLine(a.Position.X); // <--- I have 1 here!
我想知道为什么输出不是 100?据我了解,我收到了有关具有 Position 属性的私有字段的参考。我说的对吗?
我可以在不添加 set-property 和用新的 PointF 对象传播 Position 的情况下更改属性吗?
【问题讨论】:
-
不,你不能。因为 PointF 是结构体,是值类型。
-
是的,你可以。你能粘贴你的 PointF 的代码吗,我认为 PointF.X 上的设置器没有做它应该做的事情。 -- 编辑:哦,我没有意识到 PointF 是一个结构而不是一个类......所以你的
p变量是一个从 a.Position 复制的全新结构。如果您希望它成为引用,则必须将 PointF 封装在一个类中或将新类型定义为一个类。或者你可以使用 Point 类。 -
你确定吗??!!!我测试了它的工作原理。您是否还可以在示例中添加 PointF 类。编辑:大声笑我也没有看到结构
标签: c# properties pass-by-reference