我是C#的新手,这些天我正在从msdn.microsoft.com( http://msdn.microsoft.com/zh-cn/library/vstudio/dd492172.aspx )学习本教程,

在本教程的一部分中,有一条语句可以使新对象产生思考,但是我不确定要使用数字上下控件,该语句是:

NumericUpDown answerBox = sender as NumericUpDown; 

它在此页面上( http://msdn.microsoft.com/zh-cn/library/vstudio/dd492138.aspx

问题是,这两个语句之间有什么区别?两者都有什么意思。

NumericUpDown answerBox = sender as NumericUpDown;

NumericUpDown answerBox = new NumericUpDown();

先感谢您。

===============>>#1 票数:2

如果将代码放回上下文中,则可以看到:

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之间没有相似之处。

===============>>#2 票数:2 已采纳

他们有很大的不同。

  1. NumericUpDown answerBox = sender as NumericUpdown;

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

  2. NumericUpDown answerBox = new NumericUpDown();

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

===============>>#3 票数:1

这将创建一个新的NumericUpDown实例:

 new NumericUpDown();

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

sender as NumericUpDown;

参见MSDN:

===============>>#4 票数:0

输入NumericUpDown(本教程已预订的事件)后,Windows窗体将传递作为sender输入的特定NumericUpDown框。 sender是一个对象,这意味着可以传递任何东西,因为许多对象都有这样的事件。 您需要告诉编译器此sender是NumericUpDown,这是第一个sender所做的。

第二个创建了一个全新的NumericUpDown,它没有任何形式,因此基本上没有用。

===============>>#5 票数:0

第一个实际上是采用对象“发送者”并将其强制转换为“ NumericUpDown”类型。 它更接近以下转换代码:“(NumericUpDown)sender”,主要区别在于,如果“发送者”的类型不能转换为NumericUpDown类型,则“ as”运算符返回null,而(NumericUpDown)发件人将引发InvalidCastException。

第二条语句“ NumericUpDown answerBox = new NumericUpDown()”正在使用其无参数构造函数创建NumericUpDown类型的新实例。

  ask by Abdullah Ahmad translate from so

未解决问题?本站智能推荐: