GiveDollar

Personをstructで作って、 次のようなメソッドを用意したのだが、

   struct Person
   {
    public int dollar;
       public string name;

       public Person(string name, int dollar)
       {
           this.name = name;
           this.dollar = dollar;
       }

        public void GiveDollar(int d, Person p)
        {
            p.dollar += d;
            dollar -= d;
        }
    ...
    }
    ...
     Person Alice = new Person("Alice", 100);
     Person Bob = new Person("Bob", 100);
     Alice.GiveDoller(30, Bob);

dollar -= d;は効くのだが、p.dollar += d;は効果がない。 上の例でいうと、Aliceの所持金は70ドルに減るが、 Bobは100ドルのままとなる。 つまり構造体のインスタンスを引数に渡すと、値渡しになるので、pはコピーが渡されているから、 GiveDollarを呼んだ側には影響しないのだった。 なので、Personをclassで定義すれば引数は参照渡しだから、こちらはOKなのである。 XNAはクラスよりも構造体を多用する傾向があるので、 (もとJavaユーザ的には)あまりなれてない構造体を使ってみたのだが、こんなところに陥し穴があるとは。 深いね。