我想知道下面发生了什么:
ListBox listboxNames = (ListBox)sender;
我从中理解的是:创建了一个动态列表框。
但是发件人做了什么,为什么要由(ListBox)
投射?
答案 0 :(得分:1)
基本上,它采用变量sender
(这可能是由于你的函数可能是一个事件的处理程序,我是对的)?并将其转换为类型ListBox
,并将该值放入名为listboxNames
的变量中。这个工作的原因主要是由于参数sender
是ListBox
,但它必须转换为一个对象,以便能够将其发送到函数而不必加载过载(这是在仿制药可用之前)。但是,演员表会让你恢复原来的类型。
答案 1 :(得分:1)
通常sender
是抛出事件的对象。在你的情况下它可能是ListBox,这就是为什么你可以把它投射到ListBox。所以它不是任何特殊的魔术对象,而是传递给你的方法的实际ListBox'伪装'作为一般对象。
因此,您不创建动态对象,但是您知道它必须是ListBox,您可以安全地投射它并使用它。但请注意,它与GUI中的ListBox相同,因此您对其所做的任何更改都将反映在您的GUI中。
答案 2 :(得分: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所有成员的访问。