アプリ版:「スタンプのみでお礼する」機能のリリースについて

今C#を勉強しているのですが、よくコンストラクタがわかりません。初期化をする、というのは理解できるのですが、オーバーロードの際、
int get;
string get2;   
Person(int a )  ?
{
get=a;
get2="ああ"
}
Person(int b,string a)  ?
{
get=b;
get2=a
}
show()
{
Console.WriteLine("{0}{1}"get,get2);
}
メインメソッド
Person p1 = new Person( 1);
Person p2 = new Person(2,"あ");
p1.show();
p2.show();
こうすると出力結果が
1ああ
2あ
になるはずですが、(わかりずらいですが、)自分の中ではnew演算子が呼ばれたときに?が呼ばれて、変数に値が入ります。そして次のnew演算子で?が呼ばれて値が上書きされるので2あ 2あ になると思うのですが。それともp1.show();の時点でもう一回コンストラクタが呼ばれているのでしょうか。要は上書きされるのか、showの時にコンストラクタが呼ばれ、その値で出力されるのか、です。

A 回答 (3件)

p1とp2は、残念ですが別の存在です。


p1がコンストラクタを実行したら、p1のインスタンスにあるそのコンストラクタが実行されて、p1が持っているフィールドが初期化されます。
同様に、p2がコンストラクタを実行したら、p2のインスタンスにあるそのコンストラクタが実行されて、p2が持っているフィールドが初期化されます。

イメージとしては、p1とp2をそれぞれ宣言したとき、Personクラスのコピーがp1、p2のそれぞれに作られていると考えると、分かりやすいかもしれません。
なので、p1で実行した結果はp1のものですし、p2で実行した結果はp2のものになります。

詳しい話は、検索すればいくらでも出てくるので、調べてみると良いでしょう。
    • good
    • 0

> 要は上書きされるのか、showの時にコンストラクタが呼ばれ、その値で出力されるのか、です。



・p1とp2は別物だから、上書きされることは無い。
・show()の時に、コンストラクタは呼び出しているわけではない。

デバッガを使って、インスタンスのアドレスが具体的にどんな値をとってるかをプログラムを動かしながら調べては。
抽象的に考えて分からないときは、手を動かしてみるのが、理解への早道。
    • good
    • 0

2つ目の new で, なぜ「値が上書きされる」と思ったの?

    • good
    • 0

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