问题描述
我有一个自定义类,它对大多数代码库来说就像一个事件,但为内部类添加了一些额外的功能。这个类给我的好处是我可以提供一个单一的访问点来订阅事件,但也可以在内部传递事件,以便可以动态更改调用事件的适当系统。我遇到的最大问题是,在 += 之后按 Tab 时,Visual Studio 将不再自动生成事件处理程序,我发现这很烦人。
我已经考虑过编写 Visual Studio 扩展,但是 ICompletionSource
似乎主要只是处理自动完成一个连续的字符串并在当前方法之外添加事件处理程序似乎是这样更难的是弄清楚文本上下文何时是自定义事件之一并正确命名新的事件处理程序。
以下是自定义事件类的最简单版本作为示例,以防万一:
using System;
public class CustomEvent
{
public delegate void CustomEventDelegate();
private event CustomEventDelegate customEvent;
public static CustomEvent operator +(CustomEvent e,CustomEventDelegate del)
{
e.customEvent = (CustomEventDelegate)Delegate.Combine(e.customEvent,del);
return e;
}
public static CustomEvent operator -(CustomEvent e,CustomEventDelegate del)
{
e.customEvent = (CustomEventDelegate)Delegate.Remove(e.customEvent,del);
return e;
}
internal void Invoke()
{
customEvent?.Invoke();
}
}
解决方法
虽然这不能回答您的确切问题,但我相信它解决了根本问题(智能感知不适用于您的自定义事件)。
这可能不符合我不了解真正课程的要求,但是您尝试过这样的事情吗?它适用于给出的示例。
public class CustomEvent
{
public delegate void CustomEventDelegate();
private CustomEventDelegate customEvent;
public event CustomEventDelegate TheCustomEvent
{
add { AddToEvent(this,value); }
remove { RemoveFromEvent(this,value); }
}
private static void AddToEvent(CustomEvent e,CustomEventDelegate del)
{
e.customEvent = (CustomEventDelegate)Delegate.Combine(e.customEvent,del);
}
private static void RemoveFromEvent(CustomEvent e,CustomEventDelegate del)
{
e.customEvent = (CustomEventDelegate)Delegate.Remove(e.customEvent,del);
}
internal void Invoke()
{
customEvent?.Invoke();
}
}