c#中(sender as)和(new)的区别
本文关键字:区别 new as sender | 更新日期: 2023-09-27 18:09:35
我是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();
提前感谢。
它们非常不同。
-
NumericUpDown answerBox = sender as NumericUpdown;
在这种情况下,您正在将传递到函数中的对象转换为
NumericUpDown
类型的对象,因此您可以安全地使用该类中定义的属性和方法。 -
NumericUpDown answerBox = new NumericUpDown();
在这种情况下,您正在创建一个类型为
NumericUpDown
的全新对象,该对象与传入的对象没有关系。您在这个新实例上调用的任何方法或访问的属性都不会对sender
*产生影响。
(*免责声明:除非类对静态成员做了一些奇怪的事情)
如果你把代码放到上下文中,你会看到:
private void answer_Enter(object sender, EventArgs e)
{
// Select the whole answer in the NumericUpDown control.
NumericUpDown answerBox = sender as NumericUpDown;
}
object sender
已经被定义为一个被称为sender
的object
,并被传递给函数。
sender as NumericUpDown;
行所做的是将object
解析为NumericUpDown
,以便在函数中使用。
所以new
和as
之间没有相似性
创建一个新的NumericUpDown
实例:
new NumericUpDown();
As
用于执行兼容类型之间的转换。
sender as NumericUpDown;
看到MSDN:
新当输入NumericUpDown时(本教程让您订阅的事件),Windows窗体传递作为sender
输入的特定NumericUpDown框。sender
是一个对象,这意味着任何东西都可以传入,因为许多对象都有这样的事件。你需要告诉编译器这个sender
是一个NumericUpDown,这是第一个所做的。
第二个创建了一个全新的NumericUpDown,它没有在任何表单上,所以基本上是无用的。
第一个,实际上是采用对象"sender"并将其转换为"NumericUpDown"类型。它更接近下面的强制转换代码:"(NumericUpDown)sender",关键的区别在于,如果"sender"的类型不能被强制转换为NumericUpDown类型,"as"操作符返回null,而(NumericUpDown)sender将抛出InvalidCastException。
第二个语句,"NumericUpDown answerBox = new NumericUpDown()",正在使用其无参数构造函数创建NumericUpDown类型的新实例。