【发布时间】:2011-06-27 11:52:56
【问题描述】:
如果主题名称与我的问题不符,我很抱歉。我打算用谷歌搜索它,但我不知道我的“问题”是如何被调用的:(
我认为这是一个非常基本的问题,但我认为理解这一点很重要。 首先我将显示代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
A a = new A();
a.x = 5;
a.y = 41;
B b = new B();
b.a = 14;
b.b = a.y;
b.c = a;
a.x += 10;
a.y -= 30;
}
}
class A
{
public int x;
public int y;
}
class B
{
public int a;
public int b;
public A c;
}
}
我有一些非常基本的类 A 和 B。B 可以保存 A 的实例。我遇到的“问题”是:
如果将 A 传递给 B 并设置 A 的属性 (a.y -= 30;),则 b.b 的值也会发生变化。我该如何避免呢?
我只希望b.b 成为a.y 的值。但是如果a.y 发生变化,b.b 不应该!
这样做的唯一方法是创建对象的克隆然后传递它吗?
【问题讨论】:
-
您的意思是真的希望 b.c(而不是 b.b)在 a.y 的值发生变化时保持不变?
-
你不是说在将 a 传递给 b 之后:
b.c = a;然后在做a.y -= 30b.c.y的值也会改变吗? -
更改
b.c.y的值也会更改a.y的值。我想这就是你的意思
标签: c# clone parameter-passing