変数には値型の変数と参照型の変数があります
値型の変数と参照型の変数の違いは、以下の通りです
値そのものを格納します
値の格納場所の情報(参照先のアドレス)を格納します
各型のイメージ
①値型
②参照型
各型の実装例
①値型
// 値型の変数str1,str2を宣言します
////////////////
// str1 = ?
// str2 = ?
////////////////
string str1, str2;
// 変数str1に、文字列"あ"を代入します
////////////////
// str1 = "あ"
// str2 = ?
////////////////
str1 = "あ";
// 変数str2に、変数str1に格納されている値を代入します
////////////////
// str1 = "あ"
// str2 = "あ"
////////////////
str2 = str1;
// 変数str2に、"ん"を追加します
////////////////
// str1 = "あ"
// str2 = "あん"
////////////////
str2 += "ん";
// メッセージボックスを出力します
MessageBox.Show(string.Format("str1:{0}\nstr2:{1}", str1, str2));
②参照型
// 参照型の変数cls1,cls2を宣言します
////////////////
// cls1 = null
// cls2 = null
////////////////
TestClass cls1, cls2;
// 変数cls1に新しいインスタンス①のアドレスを代入します
////////////////
// cls1 = インスタンス①のアドレス
// cls2 = null
////////////////
cls1 = new TestClass();
// 変数cls2に、変数cls1に格納されている値を代入します
////////////////
// cls1 = インスタンス①のアドレス
// cls2 = インスタンス①のアドレス
////////////////
cls2 = cls1;
// 変数cls2の参照先のインスタンス①のVal1の値を変更します
////////////////
// cls1 = インスタンス①のアドレス
// cls2 = インスタンス①のアドレス
////////////////
cls2.Val1 = "あ";
// メッセージボックスを出力します
// 両方とも同じインスタンス①を参照しているので、同じ値が出力されます
MessageBox.Show(string.Format("cls1:{0}\ncls2:{1}", cls1.Val1, cls2.Val1));
/// <summary>
/// テストクラス
/// </summary>
class TestClass
{
public string Val1
{
get;
set;
}
}
最終更新:2014年01月25日 11:08