C Sharp事件处理程序

时间:2014-06-19 12:11:12

标签: c# event-handling

private void button1_Click(object sender, EventArgs e)
{
    Button source = (Button)sender;
    MessageBox.Show("The message inside the button is " + source.Text);
}

我正在关注C sharp的Event Handler教程,我是一名Python用户,

public static void Main()
{
    Message myMessage = new Message();
    myMessage.ShowMessage += new MessageHandler(myMessage.DisplayMessage);
}

我现在知道创建类的新实例的基本语法,但我不明白为什么第一行中有一个Button的括号。这两个代码之间有什么区别?

3 个答案:

答案 0 :(得分:4)

在c#中,每个类都继承自object类。因为Object是父类,它可以用于实例化任何子类。所以当我们收到object类实例时,我们希望它是Button,因此我们将其解析为Button对象

private void button1_Click(object sender, EventArgs e)

此处sender被指定为对象类型变量。

Button source = (Button)sender;

此处,对象变量sender被解析为Button对象并保存在Button类型变量

答案 1 :(得分:2)

此处(按钮)用于将对象发送者强制转换为按钮类型,因为您需要按钮中的类型。在第二个例子中,你已经提到了它创建Message类的实例。

有关详细信息,请参阅此

http://msdn.microsoft.com/en-IN/library/ms173105.aspx

Typecasting in C#

答案 2 :(得分:1)

senderobject。为了获得按钮的Text属性,其单击处理程序为button1_Click,您必须将sender强制转换为Button类型的对象,以便稍后获取source.Text

实际上,sender是该操作的控件。因为.NET中的所有类型都继承了基类型System.Object,所以为了获得按钮的特定属性,必须将发送方强制转换为Button类型的对象。