我想知道下面发生了什么:
ListBox listboxNames = (ListBox)sender;
我从中了解到的是:创建了一个动态列表框。
但是发件人做了什么,为什么会被施放(ListBox)
?
在这种情况下,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 的所有成员的访问的新变量。
基本上,它正在使用变量sender
(这可能是由于您的函数可能是事件的处理程序,对吗)?并将其转换为 type ListBox
,并将该值放入名为 的变量listboxNames
中。这个工作的原因基本上是由于参数sender
是 a ListBox
,但它必须被转换为一个对象才能将它发送到一个函数而不必进行重载(这是在泛型可用之前)。但是,演员表可以让你恢复到原来的类型。
通常sender
是引发事件的对象。在您的情况下,它可能是 ListBox,这就是您可以将其转换为 ListBox 的原因。所以它不是任何特殊的魔法对象,而是作为通用对象“伪装”传递给您的方法的实际 ListBox。
因此,您无需创建动态对象,但您知道它必须是 ListBox,您可以安全地转换并使用它。但请注意,它与您的 GUI 中的 ListBox 相同,因此您对其所做的任何更改都将反映在您的 GUI 中。