C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.41328 の関連記事表示

<< 0 >>
■41328  Re[4]: C#における値渡しと参照渡しのコーディングについて
□投稿者/ simano -(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を使い、意図と結果が違ってしまったので、
    (実際は構造体だが、クラスだと思って使った)
    同じ事態が大量のコードの中で起きたら辛いなと・・・。


記事No.41320 のレス /過去ログ71より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -