我是C#的新手,这些天我正在从msdn.microsoft.com(http://msdn.microsoft.com/en-us/library/vstudio/dd492172.aspx)学习本教程,
本教程的一部分有一个声明来创建一个新对象,但我不确定数字向上控制,语句是:
NumericUpDown answerBox = sender as NumericUpDown;
就在这个页面上 (http://msdn.microsoft.com/en-us/library/vstudio/dd492138.aspx)
问题是,这两个陈述之间有什么区别?两者都意味着什么。
NumericUpDown answerBox = sender as NumericUpDown;
和
NumericUpDown answerBox = new NumericUpDown();
提前谢谢。
答案 0 :(得分:2)
如果您将代码放回上下文,您可以看到:
private void answer_Enter(object sender, EventArgs e)
{
// Select the whole answer in the NumericUpDown control.
NumericUpDown answerBox = sender as NumericUpDown;
}
object sender
已被定义为已传递给该函数的名为object
的{{1}}。
sender
行正在做的是将sender as NumericUpDown;
解析为object
以便在函数中使用。
答案 1 :(得分:2)
他们非常不同。
NumericUpDown answerBox = sender as NumericUpdown;
在这种情况下,您将要传递给函数的对象转换为类型为NumericUpDown
的对象,因此您可以安全地使用该类中定义的属性和方法。
NumericUpDown answerBox = new NumericUpDown();
在这种情况下,您将创建一个类型为NumericUpDown
的全新对象,它与传入的对象无关。您调用的任何方法或您在此新实例上访问的属性对sender
* 没有影响。
(*免责声明:除非班级对静态成员做了一些奇怪的事情)
答案 2 :(得分:1)
这个创建NumericUpDown
的新实例:
new NumericUpDown();
As
用于执行兼容类型之间的转换。
sender as NumericUpDown;
请参阅MSDN:
答案 3 :(得分:0)
当输入NumericUpDown(您订阅的教程事件)时,Windows窗体会传递作为sender
输入的特定NumericUpDown框。 sender
是一个Object,这意味着任何东西都可以传入,因为许多对象都有这样的事件。你需要告诉编译器这个sender
是一个NumericUpDown,这是第一个做的。
第二个创建了一个全新的NumericUpDown,它不是任何形式的,所以基本没用。
答案 4 :(得分:0)
第一个,实际上是将对象“发送者”并将其转换为“NumericUpDown”类型。它更接近于下面的转换代码:“(NumericUpDown)sender”,关键区别在于,如果“sender”的类型不能转换为NumericUpDown类型,则“as”运算符返回null,而(NumericUpDown)发件人将抛出InvalidCastException。
第二个语句“NumericUpDown answerBox = new NumericUpDown()”,正在使用其无参数构造函数创建NumericUpDown类型的新实例。