了解C#事件使用发送方对象

我是C#作为一种语言(来自C ++背景)的新手,我目前正在编写一个使用事件驱动API的应用程序。

这主要包括注册事件/响应处理程序和启动事件监视器,然后处理这些异步事件/响应。

我理解有点麻烦的是发送者对象的使用。

我想要使​​用的是在发出请求(或设置监视器)时将句柄传递给具有各种结构和数据的类对象。 然后在收到的响应/正在引发的事件中,我可以获取发送者对象,将其转换回预期的类类型并访问成员,进行进一步的更改等等,以便将其视为仍然是指向原始数据的指针(我希望它会是什么?)。

所以我的问题是,当我在我的请求中传递一个类对象时,它是否实际上是一个引用,或者它将被复制到值的某个位置,因为它实际上只是一个通用对象,我最终会得到一个活动中我的class级对象的空副本?

或者第三个选项,我可能完全在错误的轨道上,应该忘记整个事情? 🙂

问题是我的大脑仍然在指针模式下工作我想…

我不知道我完全理解你的问题。 但要部分回答你:

您将获得对象的引用。

这是一个参考。 试试这段代码,了解它是如何工作的:

private void textBox1_TextChanged(object sender, EventArgs e) { Whatever(sender); } private void Whatever(object sender) { TextBox tb = (TextBox)sender; tb.Text = "yo"; } 

如果object未通过引用传递,则textBox1将保留您键入的任何文本。

在.NET中,所有类都是引用类型,引用总是通过引用传递(引用的当前实现是一个指针,当它需要时可以由GC移动),所以你不需要不得不担心任何事情。

关于事件,sender参数始终是生成事件的对象(例如, Button上的Click事件中的Button )。 如果要在自定义事件中传递任意数据,请从EventArgsinheritance并将其作为第二个参数传递。

参数通过引用传递时,

1.可以更改引用实例中存在的属性,而不会影响原始引用实例。

2.可以使用ref关键字更改原始引用。

以下是一个例子

 public partial class ParentForm : Form { public ParentForm() { InitializeComponent(); ChildForm childForm = new ChildForm(); ChangeCaption( childForm ); //Will display the dialog with the changed caption. childForm.ShowDialog(); ChangeCaption( ref childForm ); //Will give error as it is null childForm.ShowDialog(); } void ChangeCaption( ChildForm formParam ) { // This will change openForm's display text formParam.Text = "From name has now been changed"; // No effect on openForm formParam = null; } void ChangeCaption( ref ChildForm formParam ) { // This will change openForm's display text formParam.Text = "From name has now been changed"; // This will destroy the openForm variable! formParam = null; } }