如果主题名称与我的问题不符,我很抱歉。我想把它搞定,但我不知道我的“问题”是怎么称呼的:(
我认为这是一个非常基本的问题,但我认为理解这一点非常重要。 首先,我将展示代码:
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
就不应该!
是唯一的方法,创建对象的克隆,然后传递它?
答案 0 :(得分:2)
一切都按预期工作
答案 1 :(得分:1)
带
b.c = a;
您正在传递对象的引用。
要避免这种情况,您必须使用该对象的副本。你已经认识到的克隆。
答案 2 :(得分:0)
使用a.y -= 30
时,b.b
不会更改。 int
是值类型,而不是引用类型。
(您的假设不正确)