微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决是否可以将事件智能感知功能添加到 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();
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?