gpt4 book ai didi

c# - .NET 中是否可以将类的成员对象的事件暴露给外部?

转载 作者:可可西里 更新时间:2023-11-01 03:06:18 26 4
gpt4 key购买 nike

假设我在 ASP.NET 中有一个包含按钮的用户控件:

public class MyUserControl : UserControl {
private Button btnSave = new Button();
}

我可以通过创建指向按钮的属性将按钮的任何属性暴露给外部:

public string SaveButtonText { 
get { return btnSave.Text; }
set { btnSave.Text = value; }
}

然后我可以这样做来设置按钮的文本:

MyControl.SaveButtonText = "hello world";

我是否也可以使用类似的构造来将按钮的事件暴露给外部?像这样的东西:

public event SaveButtonClick { return btnSave.OnClick; }
...
MyControl.SaveButtonClick += new EventHandler(...);

最佳答案

你可以做类似的事情,是的:

public event EventHandler SaveButtonClick
{
add { btnSave.Click += value; }
remove { btnSave.Click -= value; }
}

但是请注意,这有一个缺点 - 提供给事件处理程序的“发送者”参数仍然是保存按钮而不是您的控件……这可能不是订阅者所期望的。另一种方法是自己订阅一次保存按钮的点击处理程序:

public event EventHandler SaveButtonClick = delegate {};

private void OnSaveButtonClicked(object sender, EventArgs e)
{
// Replace the original sender with "this"
SaveButtonClick(this, e);
}
...
btnSave.Click += OnSaveButtonClicked();

这种方法也有一个缺点...您最终会一直从保存按钮引用“this”,这可能会产生影响关于垃圾收集。基本上,在保存按钮也符合垃圾回收条件之前,您的控件将无法被垃圾回收。在这种情况下,我非常怀疑这是一个问题,但值得注意。

关于c# - .NET 中是否可以将类的成员对象的事件暴露给外部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3612137/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com