0

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

本教程的一部分有一个声明可以使一个新对象成为think但我不确定数字上下控制,声明是:

NumericUpDown answerBox = sender as NumericUpDown; 

它在这个页面上(http://msdn.microsoft.com/en-us/library/vstudio/dd492138.aspx

问题是,这两个陈述之间有什么区别?以及两者的含义。

NumericUpDown answerBox = sender as NumericUpDown;

NumericUpDown answerBox = new NumericUpDown();

先感谢您。

4

5 回答 5

2

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

private void answer_Enter(object sender, EventArgs e)
{
    // Select the whole answer in the NumericUpDown control.
    NumericUpDown answerBox = sender as NumericUpDown;
}

object sender已被定义为已传递给函数的调用objectsender

该行sender as NumericUpDown;正在做的是将其解析object为 aNumericUpDown以供在函数中使用。

所以 和 之间没有相似newas

于 2013-04-16T03:09:47.370 回答
2

它们非常不同。

  1. NumericUpDown answerBox = sender as NumericUpdown;

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

  2. NumericUpDown answerBox = new NumericUpDown();

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

于 2013-04-16T03:09:54.937 回答
1

这个创建了一个新的实例NumericUpDown

 new NumericUpDown();

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

sender as NumericUpDown;

见 MSDN:

作为

新的

于 2013-04-16T03:10:45.663 回答
0

当输入 NumericUpDown(教程让您订阅的事件)时,Windows 窗体会传递作为sender. sender是一个对象,这意味着任何东西都可以传入,因为许多对象都有这样的事件。您需要告诉编译器这sender是一个 NumericUpDown,这是第一个所做的。

第二个创建了一个全新的 NumericUpDown,它不在任何表单上,所以基本上没用。

于 2013-04-16T03:11:12.670 回答
0

第一个,实际上是获取对象“sender”并将其转换为“NumericUpDown”类型。它更接近于以下转换代码:“(NumericUpDown)sender”,主要区别在于如果“sender”的类型无法转换为 NumericUpDown 类型,则“as”运算符返回 null,而 (NumericUpDown)发件人将抛出 InvalidCastException。

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

于 2013-04-16T03:11:37.247 回答