Visual Basic具有自定义事件。自定义事件的示例:https://msdn.microsoft.com/en-us/library/wf33s4w7.aspx
有没有办法在C#中创建自定义事件?
在我的情况下,我需要创建一个的主要原因是在事件首次订阅时运行代码,这当前似乎是不可能的。
例如,我们说我有一个按钮。如果没有订阅者,我希望禁用此按钮(灰显),并且只要有至少一个订阅者就启用此按钮。从理论上讲,我可以这样做 - 如果这种语法确实存在:
// internal event, used only to simplify the custom event's code
// instead of managing the invocation list directly
private event Action someevent;
// Pseudo code ahead
public custom event Action OutwardFacingSomeEvent
{
addhandler
{
if (someevent == null || someevent.GetInvocationList().Length == 0)
this.Disabled = false;
someevent += value;
}
removehandler
{
someevent -= value;
if (someevent == null || someevent.GetInvocationList().Length == 0)
this.Disabled = true;
}
raiseevent()
{
// generally shouldn't be called, someevent should be raised directly, but let's allow it anyway
someevent?.Invoke();
}
}
如果我理解正确的VB文章,这个代码行换成VB,将完全符合我的要求。有什么方法可以>>在C#中完成吗?
换句话说/一个稍微不同的问题:有没有办法在订阅和取消订阅活动时运行代码?
答案 0 :(得分:4)
您也可以通过在C#中定义显式事件访问器来接管事件的订阅过程。以下是您示例中someevent
事件的手动实现:
private Action someevent; // Declare a private delegate
public event Action OutwardFacingSomeEvent
{
add
{
//write custom code
someevent += value;
}
remove
{
someevent -= value;
//write custom code
}
}