从其他对象属性问题设置对象属性

时间:2011-06-27 11:52:56

标签: c# clone parameter-passing

如果主题名称与我的问题不符,我很抱歉。我想把它搞定,但我不知道我的“问题”是怎么称呼的:(

我认为这是一个非常基本的问题,但我认为理解这一点非常重要。 首先,我将展示代码:

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.ba.y的值。但如果a.y发生变化,b.b就不应该! 是唯一的方法,创建对象的克隆,然后传递它?

3 个答案:

答案 0 :(得分:2)

一切都按预期工作

enter image description here

答案 1 :(得分:1)

b.c = a;

您正在传递对象的引用。

要避免这种情况,您必须使用该对象的副本。你已经认识到的克隆。

答案 2 :(得分:0)

使用a.y -= 30时,b.b不会更改。 int是值类型,而不是引用类型。

(您的假设不正确)