是否可以将事件智能感知功能添加到 Visual Studio 中的自定义类

问题描述

我有一个自定义类,它对大多数代码库来说就像一个事件,但为内部类添加了一些额外的功能。这个类给我的好处是我可以提供一个单一的访问点来订阅事件,但也可以在内部传递事件,以便可以动态更改调用事件的适当系统。我遇到的最大问题是,在 += 之后按 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();
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...