(列表框)发送者

本文关键字:发送者 列表 | 更新日期: 2023-09-27 18:18:29

我想知道下面发生了什么:

ListBox listboxNames = (ListBox)sender;

我从中理解的是:创建了一个动态列表框。

但是发送方做了什么,为什么会被(ListBox)强制转换?

(列表框)发送者

基本上,它采取变量sender(这可能是由于你的函数可能是一个事件的处理程序,我是对的吗)?并将其转换为ListBox类型,并将该值放入名为listboxNames的变量中。之所以这样做,主要是因为参数sender是一个ListBox,但它必须被转换为一个对象,以便能够将其发送给函数,而不必进行重载加载(这是在泛型可用之前)。但是,强制转换可以让它恢复到原来的类型。

通常sender是引发事件的对象。在你的例子中,它可能是ListBox,这就是为什么你可以将它强制转换为ListBox。所以它不是任何特殊的魔法对象,而是实际的ListBox,它被"伪装"成一个普通对象传递给你的方法。

所以你不创建一个动态对象,但是你知道它必须是ListBox,你可以安全地强制转换它并使用它。但是要注意,它和你的GUI中的ListBox是一样的,所以你对它所做的任何改变都会反映在你的GUI中。

在这种情况下,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所有成员的访问。