2011-06-27 270 views
0

如果主題名稱與我的問題不匹配,我非常抱歉。我一直在谷歌它,但我不知道如何我的「問題」被稱爲:(從其他對象屬性設置對象屬性問題

我認爲這是一個非常基本的問題,但我認爲這是重要的理解 首先我'會顯示代碼:

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的值也會發生變化,我怎樣才能避免這種情況? 我只是想的值爲a.y。但是如果a.y c絞刑,b.b不應該! 是唯一的方法來做到這一點,創建一個克隆的對象,然後通過它?

+0

你實際上意味着要** ** b.c(不b.b)保持不變時a.y的值更改? –

+1

你是不是指傳遞給b後:'b.c = a;'然後做'a.y - = 30'b.c.y'的值也改變了嗎? – ub1k

+0

改變'b.c.y'的值也會改變'a.y'的值。 我想這就是你的意思 –

回答

1

b.c = a;

您正在傳遞對象的引用。

爲了避免這種情況,您必須使用該對象的副本。你已經認識到了一個克隆。

+1

和傳遞給b.c有什麼錯? – Stecya

+0

也謝謝:) – GameScripting

+0

@steyca:沒什麼是錯的。但你應該知道你在做什麼。與b.c =你正在複製一個指針,而不是對象。 – nabuchodonossor

0

隨着a.y -= 30b.b不會改變。 int是一個值類型,而不是引用類型。

(你的假設是不正確的)