4

ImplementHeaderButtonsと呼ばれる非静的パブリックメソッドを含むと呼ばれる非静的クラスがありますImplement。クラスとメソッドの名前は重要ではありません。重要なのは、静的ではないため、使用するにはインスタンス化する必要があるということです。

だから私はこれを行っていました:

var implementHeaderButtons = new ImplementHeaderButtons();
implementHeaderButtons.Implement(this, headerButtons);

しかし、それから私はそれを少し試してみることにしました(実際にはそれをワンライナーにする方法を探していました)そして私は次のコードも同様に機能すると結論付けました:

new ImplementHeaderButtons().Implement(this, headerButtons);

ここで、インスタンスを保持するための変数は必要ありませんが、私の質問は、インスタンスを格納する変数がなくても、クラスの新しいインスタンスをその場で作成し、そのメソッドを呼び出すことができるのはなぜですか?

意図したとおりに機能しなくても驚かないでしょうが、機能します。

4

3 に答える 3

9

それらは静的ではないため、使用するにはインスタンス化する必要がありますよね?

はい、しかし、あなたはまだ でクラスをインスタンス化していnew ImplementHeaderButtons()ます。新しく作成されたインスタンスへの参照をどこにも保存していません。

例で行ったように、このインスタンスでメソッドを呼び出すことはできますが、後で参照なしで他のことを行うことはできません。最終的に、インスタンスはガベージ コレクターによってクリーンアップされます (呼び出すメソッドがオブジェクトへの参照をどこかに格納していない場合)。

于 2012-09-24T00:59:44.533 に答える
0

便宜上、変数は単なる参照です。あなたはそれに名前を付けていませんが、スタックの一番上にあります(一般的に;-))。変数の名前(持っていない)を使用するか、作成したばかりの「名前のない」オブジェクトで作業することにより、変数を参照できる限り、そのメソッドを呼び出すことができますか。

于 2012-09-24T01:01:33.267 に答える
0

への呼び出しnew ImplementHeaderButtons()は、ImplementHeaderButtons のインスタンスを返します。次に、.Implement()そのインスタンスを呼び出します。

次のように考えてください。

(new ImplementHeaderButtons()).Implement(this, headerButtons);
于 2012-09-24T01:03:11.310 に答える