質問: C#の参照型について 以下のようなプログラムの実行結果で、
回答: Spade13 → Spade1 にはなるよね? 参照型というのは、簡単化して考えるとオブジェクトのアドレスが入っていると考えることができるのね。 (厳密には正しくない。) 最初、king には Spade13 のアドレスが入っていて ChangeToAce(king); で、king に入っていている値、つまり Spade13 のアドレスが渡される。(値渡し) なので、ChangeToAce() の中では card.Number = 1; で Spade13 → Spade1 になる。 次の card = new Card(CardSuit.Club, 2); は、それまで、Spade1(元Spade13) のアドレスが入っていていた card の値が上書きされて Club2 のアドレスになり、この時点で Spade1 を参照しなくなる。 ChangeToAce() の引数は値渡しなので(参照渡しではないので)、メソッドから戻ってきても king はSpade1(元Spade13)のアドレスのまま。