C#, C♯, C#相談室 Part98 (518レス)
上下前次1-新
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
512(2): (アウアウウー Sacf-P6+q) 09/24(水)21:51 ID:4iPutXmOa(1) AAS
class C {
A a = new A(); // 1
C() {
A a = new A(); // 2
}
}
1と2でAのインスタンスを生成することに違いはありますか?
コンストラクタ内で生成する2でよいような気もしますが
513(1): (ワッチョイ 0601-oUuT) 09/24(水)23:10 ID:dvgofv4/0(1/2) AAS
2つ目は
class C {
A a;
C() {
a = new A();
}
}
だよね?
514: (アウアウウー Sacf-P6+q) 09/24(水)23:23 ID:ot6MCezpa(1/2) AAS
なるほど、
たしかにコンストラクタ内のローカル変数ではダメですね(aは)
お恥ずかしい…
515: (アウアウウー Sacf-P6+q) 09/24(水)23:27 ID:ot6MCezpa(2/2) AAS
では、>>512 の1と、>>513 の違いはなんなのでしょうか
516: (ワッチョイ 0601-oUuT) 09/24(水)23:53 ID:dvgofv4/0(2/2) AAS
コンストラクタが呼ばれる前に初期化できるものと
コンストラクタの中じゃないと初期化できないものがある
上の例は前者
前者に関してはどっちでもいいっちゃいいけど
フィールド宣言と一緒に初期化コードも書いたほうがわかりやすい
517: (アウアウウー Sacf-P6+q) 09/25(木)00:10 ID:By2ks0eda(1/2) AAS
ありがとうございます
やはりそんな感じなんですね
>>512 の 1はコンストラクタより前に初期化されることはテストで確認しました
ご指摘のとおり、コンストラクタ内でしか初期化できないものもあるようですね
ことばが正しくないと思いますが、デリゲートにイベントハンドラを追加するようなコードがそれに当たりました(僕の拙いテストでは)
後半の「フィールドの宣言と初期化が一緒に〜」は納得です
518: (アウアウウー Sacf-P6+q) 09/25(木)00:13 ID:By2ks0eda(2/2) AAS
x デリゲートに
o オブザーバに
これでも誤っていそうですがw
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.007s