2011-06-27 6 views
0

トピック名が問題と一致しない場合は非常に残念です。私はそれまでグーグルになっていましたが、私の "問題"がどのように呼び出されているかはわかりません:(他のオブジェクトからオブジェクトプロパティを設定するプロパティ質問

私は本当に基本的な質問だと思うが、それは理解することが重要だと思う。コードを示しでしょう:私はいくつかの非常に基本的なクラスAを持っているとB. BはAのインスタンスを保持することができます

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; 
    } 
} 

を「問題は、」私は、持っている: もしBへのパスAと設定します b.bの値をa.yとしたい場合は、a.ycハングアップ、b.bしないでください! これを行う唯一の方法は、オブジェクトのクローンを作成して渡すことですか?

+0

は、あなたが実際にあなたがしたいことを意味します** b.c **(b.bない)同じままにするときa.yの値が変更? –

+1

aをbに渡した後、 'b.c = a;'それから 'a.y - = 30'を実行すると、' b.c.y'の値も変わりますか? – ub1k

+0

'b.c.y'の値を変更すると、' a.y'の値も変更されます。 私はそれがどういう意味なのでしょうか –

答えて

2

すべての作品、b.bは変更されません。 intは値型であり、参照型ではありません。

(あなたの仮定が間違っている)

+0

あなたはそれを正しくしました。私はb.cに混乱しました。 – GameScripting

1

b.c = a;

オブジェクトへの参照を渡しています。

これを避けるには、オブジェクトのコピーを使用する必要があります。あなたがすでに認識しているように、クローン。 a.y -= 30

enter image description here

+1

そして、aをb.cに渡すと間違っていますか? – Stecya

+0

ありがとうございます。 – GameScripting

+0

@steyca:何も間違っていません。あなたがしていることを知っているはずです。 b.c = aでは、オブジェクトではなくポインタをコピーしています。 – nabuchodonossor

0

を期待通りに

関連する問題