これはC#でちょっと混乱したことをまとめたメモ。
- C#の型には値型(System.ValueType)と参照型(System.Object)がある
- メソッドへの引数はデフォルトで、値型では値渡し、参照型では参照渡しで渡される
- 配列(System.Array)も参照型である
- 2, 3より配列をメソッドへの引数として指定すれば参照渡しで渡される
- 4より配列への参照を変数として格納すれば、参照先の配列の内容の変更の影響を受ける
- string型は参照型(System.String)である
- 2, 6よりstring型をメソッドへの引数として指定すれば参照渡しで渡される
- string型はインスタンシング後は不変である
- 8よりインスタンシング後のstring型の内容を変更しようとすれば新しいstring型インスタンスが作られ、そのインスタンスへの参照が返される
1~9よりstring型は参照型であるのにもかかわらず、「string型の参照をどこか他のstring型に代入しておいて、コピー元か先のstring型の内容を
変更する」ということを行っても、もう一方に影響が無い