■41328 / inTopicNo.5) |
Re[4]: C#における値渡しと参照渡しのコーディングについて |
□投稿者/ simano (10回)-(2009/09/17(Thu) 21:35:39)
|
■No41326 (Jitta on the way さん) に返信 > ■No41324 (simano さん) に返信 > > 元の質問を一部読み違っていました。 > > >>メソッドの引数に構造体を渡した場合は「値渡し」となり、 >>クラスを渡した場合は「参照渡し」となるとあります。 > > どこに書いてありました?どちらも値渡しのはずです。 > > > バス停が近いので、これでごめんなさい
説明が悪かったらすみません。 以下を参考にしました。 http://msdn.microsoft.com/ja-jp/library/8b0bdca4%28VS.100%29.aspx
実際に試してみましたが、やはり、クラスの内部変数の値は変更されますが、 構造体の内部変数の値は変更されないようです。
---------- ■コード static void Main(string[] args) { MyClassPoint classp = new MyClassPoint(); Console.WriteLine("classp.X = {0}, classp.Y = {1}", classp.X, classp.Y); new ChangeManager().Change(classp); Console.WriteLine("classp.X = {0}, classp.Y = {1}", classp.X, classp.Y);
MyStructPoint structp = new MyStructPoint(); Console.WriteLine("structp.X = {0}, structp.Y = {1}", structp.X, structp.Y); new ChangeManager().Change(structp); Console.WriteLine("structp.X = {0}, structp.Y = {1}", structp.X, structp.Y); Console.ReadLine(); }
class MyClassPoint { public int X; public int Y; }
struct MyStructPoint { public int X; public int Y; }
class ChangeManager { public void Change(MyClassPoint p) { p.X = 1; p.Y = 2; }
public void Change(MyStructPoint p) { p.X = 1; p.Y = 2; } } ---------- ■結果 classp.X = 0, classp.Y = 0 classp.X = 1, classp.Y = 2 structp.X = 0, structp.Y = 0 structp.X = 0, structp.Y = 0 ----------
普通はクラスを作るから問題ないと思うんですが、たまたま最初にテストしたときに System.Drawing.Pointを使い、意図と結果が違ってしまったので、 (実際は構造体だが、クラスだと思って使った) 同じ事態が大量のコードの中で起きたら辛いなと・・・。
|
|