C#中的(sender as)和(new)之间的区别

时间:2013-04-16 03:06:09

标签: c#

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

提前谢谢。

5 个答案:

答案 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以便在函数中使用。

因此newas之间没有相似之处。

答案 1 :(得分:2)

他们非常不同。

  1. NumericUpDown answerBox = sender as NumericUpdown;

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

  2. NumericUpDown answerBox = new NumericUpDown();

    在这种情况下,您将创建一个类型为NumericUpDown全新对象,它与传入的对象无关。您调用的任何方法或您在此新实例上访问的属性对sender * 没有影响。
    (*免责声明:除非班级对静态成员做了一些奇怪的事情)

答案 2 :(得分:1)

这个创建NumericUpDown的新实例:

 new NumericUpDown();

As用于执行兼容类型之间的转换。

sender as NumericUpDown;

请参阅MSDN:

as

new

答案 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类型的新实例。