C#中类似VB的自定义事件

时间:2017-04-20 10:36:37

标签: c# vb.net

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#中完成吗?

换句话说/一个稍微不同的问题:有没有办法在订阅和取消订阅活动时运行代码?

1 个答案:

答案 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
    }
}