プロが教えるわが家の防犯対策術!

C#について質問です。文字列型(string)は
参照型なのに値型と同じように振る舞うそうですが、それならどうして値型ではなく参照型だと分かるんですか?
そして何故参照型なのに値型のように振る舞うんですか?
具体的には
string a="あ";
string b=a;
string a="い";
console.writeline(b);
このように書くと「い」ではなく「あ」が出力されるようなのですが、どうしてなのかがわかりません。他の参照型のものと何か違うんですか?なるべく詳しく教えて下さい。

A 回答 (4件)

>上から順番に命令が実行されて下の命令が上の命令に影響しないってことですか?


違います。
「どうして値型ではなく参照型だと分かるんですか?」との質問でしたが、動作だけを見ると値型です。
内部の見えないところで参照型の動きをしているのです。

string a="い"; としたときに "あ" への参照を外し、新しく用意確保した ”い” を参照する内部処理になっています。

>これはstringの場合だけですか?
stringの場合だけです

参考URL:
https://dobon.net/vb/dotnet/beginner/valuerefere …
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2020/03/06 19:33

No.1です



| 値型のようにコピーされるのに参照型なんですか?

はい。
「参照型なのに値型と同じように振る舞う」のです。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2020/03/06 19:08

stringの場合、メモリに格納された文字列への参照になります。



string a="あ";
 →メモリに”あ”が格納され、aの参照先になる
string b=a;
 →bにaの参照先(”あ”の参照先)が設定される
string a="い";
 →メモリに”い”が格納され、aの参照先になる
    • good
    • 0
この回答へのお礼

上から順番に命令が実行されて下の命令が上の命令に影響しないってことですか?
これはstringの場合だけですか?

お礼日時:2020/03/06 17:25

string b=a; は、値型のようにコピーされるからです。

    • good
    • 0
この回答へのお礼

値型のようにコピーされるのに参照型なんですか?

お礼日時:2020/03/06 17:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!