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();

提前感谢。

c#中(sender as)和(new)的区别

它们非常不同。

  1. NumericUpDown answerBox = sender as NumericUpdown;

    在这种情况下,您正在将传递到函数中的对象转换为NumericUpDown类型的对象,因此您可以安全地使用该类中定义的属性和方法。

  2. 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已经被定义为一个被称为senderobject,并被传递给函数。

sender as NumericUpDown;行所做的是将object解析为NumericUpDown,以便在函数中使用。

所以newas之间没有相似性

创建一个新的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类型的新实例。