0

以下で何が起こっているのか知りたいです。

ListBox listboxNames = (ListBox)sender;

このことから私が理解しているのは、動的リストボックスが作成されるということです。

しかし、送信者は何をし、なぜそれが によってキャストされているの(ListBox)でしょうか?

4

3 に答える 3

1

基本的に、それは変数を取っていますsender(おそらくあなたの関数がおそらくイベントのハンドラーであるためです)?型にキャストし、ListBoxその値を という変数に入れますlistboxNames。これが機能する理由は、基本的にはパラメーターsenderが であるListBoxためですが、オーバーロードをロードせずに関数に送信できるようにするには、オブジェクトに変換する必要がありました (これは、ジェネリックが利用可能になる前でした)。ただし、キャストを使用すると、元の型に戻すことができます。

于 2013-06-15T22:18:25.880 に答える
1

通常、senderはイベントをスローするオブジェクトです。あなたの場合、おそらくListBoxであり、それがListBoxにキャストできる理由です。したがって、それは特別な魔法のオブジェクトではなく、一般的なオブジェクトとして「偽装」されたメソッドに渡される実際の ListBox です。

したがって、動的オブジェクトを作成しませんが、ListBox でなければならないことがわかっているので、安全にキャストして使用できます。ただし、GUI にあるのと同じ ListBox であるため、それに加えた変更はすべて GUI に反映されることに注意してください。

于 2013-06-15T22:18:43.003 に答える
1

この場合、senderほとんどの場合、次のようなイベント ハンドラーのパラメーターです。

private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
    // sender only provides access to Object members
    // radioButton provdes access to all members available to RadioButtons
    RadioButton radioButton = (RadioButton)sender;
}

はい?イベント ハンドラーでsenderは、イベントを生成したオブジェクトへの参照です。あなたの例では、それは ListBox です。私の場合、それは RadioButton です。ただし、senderはハンドラーでオブジェクトとして型指定されるため、その特定のインスタンスで使用可能なプロパティとメソッドの小さなサブセットにしかアクセスできません。ListBox や RadioButton などで使用できるすべての関数にアクセスする唯一の方法は、その型にキャストすることです。ここでは新しいオブジェクトは作成されないことに注意してください。あなたの例sender ではListBoxです。同じオブジェクト インスタンスを指し、ListBox のすべてのメンバーへのアクセスを提供する新しい変数を作成しているだけです。

于 2013-06-15T22:58:50.353 に答える