在派生抽象类中强制执行事件

2024-02-24

我正在尝试创建我所认为的翻译类,以便我的程序可以与各种目标平台对话。每个平台都将由抽象类的单独实现来处理。为了简单起见,我已经削减了一些内容。

我有一个抽象类,有几个抽象方法:

abstract class ControllerBase
{
    public abstract bool EnableDTMFDetection(string CallID, Party Party);
    public abstract bool DisableDTMFDetection(string CallID, Party Party);
}

随后是一个从 ControllerBase 派生的类,并完全实现这些方法:

class PlatformOne : ControllerBase
{
    public override bool EnableDTMFDetection(string CallID, Party Party)
    {
        // Do Stuff
        return true;
    }

    public override bool DisableDTMFDetection(string CallID, Party Party)
    {
        // Do Stuff
        return true;
    }
}

到目前为止,一切都很好。对于 PlatformOne,我被迫定义每个方法,规定如何将传出消息发送到目标平台。

是即将到来的事件吸引了我。我需要能够从派生类中引发事件。当我将以下内容添加到控制器库时:

    public delegate void MyEventHandler(object sender, EventArgs e);
    public event MyEventHandler MyEvent;

它编译得很好,但我无法在没有错误的情况下从派生类中引发事件:“事件 'ControllerBase.MyEvent' 只能出现在 += 或 -= 的左侧(除非在输入“ControllerBase”)”

因此,a) 如何从派生类中引发事件,b) 任何人都可以建议一种机制,用于强制从派生类中连接指定事件(抽象函数或接口方法)。谢谢您的来电:)


最简单的方法是在基类中编写一个方法来引发它:

protected void OnMyEvent(EventArgs e)
{
    // Note the copy to a local variable, so that we don't risk a
    // NullReferenceException if another thread unsubscribes between the test and
    // the invocation.
    EventHandler handler = MyEvent;
    if (handler != null)
    {
        handler(this, e);
    }
}

You may想要使其成为虚拟方法,以便您可以在派生类中重写它......这取决于您的用例。

请注意,这isn't强制实现派生类中的任何内容 - 但我认为这是您真正想要的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在派生抽象类中强制执行事件 的相关文章

随机推荐

  • 解析SSIS包

    我的文件系统文件夹中有几个 dtsx 包 我尝试使用下一个脚本从包中提取附加信息 using System using System Collections Generic using System Linq using System Te
  • postgres - 从现有表中选择 * - psql 说表不存在

    全新的 postgres 安装 数据库 test 表 Graeber 是从另一个程序创建的 我想查看表 Graeber 的内容 当我连接到数据库并尝试选择 Graeber 的内容时 应用程序告诉我 ERROR relation graebe
  • 如何使用Python在for循环中向谷歌云中的文件写入和读取json对象

    我正在尝试使用 python 将 json 对象列表写入谷歌云中的文件 我能够在文件中写入单个对象 但当我尝试将其写入 for 循环时 它不起作用 这是适用于单个对象但在我迭代编写时不起作用的代码 from google cloud imp
  • Hibernate的@Version可以考虑相关实体的变化吗?

    我有 2 个实体 Parent and Child处于一对多关系中 这Parent是版本化的 即有一个 Version 字段 我的目标是同步更改Parent and Child上的实体Parent的版本 例如 一个线程更新Parent另一个
  • 如何检查画布元素是否已被污染?

    基本场景 我正在客户端加载几张图像 其中一些来自另一个域 一些则不是 有些我可以使用crossOrigin属性 https developer mozilla org en US docs HTML CORS settings attrib
  • QuerySyntaxException 无效路径 + JPA + Hibernate 5.4

    我试图根据 CriteriaQuery 获取总行数 但出现异常 org hibernate hql internal ast QuerySyntaxException Invalid path generatedAlias1 package
  • 如何去掉tableview底部的空白区域

    QTableWidget 的 tableview 底部总是有一个平淡的区域 如何去掉这个空白区域 让tableview只根据给定的数据显示行和列 你必须设置Stretch作为 resizeMode 到verticalheader impor
  • UIImagePickerController:自定义相机覆盖位于默认控件之上?

    我正在使用创建自定义相机用户界面UIImagePickerController cameraOverlayView财产 不过 我想保留一些现有的 UI 特别是顶部的闪光灯和相机选择按钮 我的想法是我会保留showsCameraControl
  • 了解 SVR scikit-learn 中收敛所需的迭代次数

    我正在尝试优化 SVR 模型 但由于过度拟合而面临问题 为了克服这个问题 我尝试减少迭代次数 而不是等到收敛为止 为了比较这两个模型 我需要两种情况的迭代次数 如何知道在开放的情况下 max iter 1 收敛所需的迭代次数 这是我的代码
  • Django forms.FileField 验证

    我在表单中使用文件字段和文本字段 class SolutionForm forms Form text forms CharField widget forms Textarea required False file forms File
  • 无法使用 ruby​​ on Rails 和回形针 gem 上传 zip 文件

    我正在开发 Rails Web 应用程序 刚刚创建并准备了一些模型和东西 该应用程序非常简单 但现在我在设置宝石回形针以向模型添加附件时遇到了问题 几乎一切都工作正常 例如附加图像 jpg 甚至 pdf 但我无法上传 zip 文件 我尝试了
  • 是否还需要双缓冲

    由于今天的卡似乎保留了渲染命令列表 并且仅在调用时刷新glFlush or glFinish 真的还需要双缓冲吗 我正在 Linux ATI Mobility radeon 卡 上使用 SDL OpenGL 开发的 OpenGL 游戏实际上
  • 在 apache poi(对于 .xlsx 文件)中创建单元格注释并禁用显示注释

    我正在尝试使用 apache poi 创建单元格注释 我可以创建注释 但默认情况下它们始终显示在 Excel 中 我必须手动右键单击单元格并取消勾选显示注释以使它们不可见 现在它们仅当我将鼠标悬停在单元格上时才出现 是否可以使单元格注释默认
  • 在 Java 中使用 Jackson 反序列化异常/可抛出的问题

    我在反序列化时遇到问题Exception and Throwable使用 Jackson 版本 2 2 1 的实例 考虑以下片段 public static void main String args throws IOException
  • 如何获取 Gmail 未读邮件数

    我使用以下代码来获取 Gmail 中的未读电子邮件计数 但是 它返回错误 can t connect Too many login failures 我在这里缺少什么吗 我正在测试的 Gmail 帐户中启用了 IMAP 和 POP NOTE
  • 选中/取消选中 datagridview 上的复选框

    有人可以帮助我为什么它不起作用吗 我有一个checkbox如果我点击它 这应该取消选中 datagridview 内的所有复选框 这些复选框在包含用户选择的复选框之前已选中 这是代码 private void chkItems Checke
  • C++ 编译器可以优化同一指针上的重复虚函数调用吗? [复制]

    这个问题在这里已经有答案了 假设我有以下代码 void f PolymorphicType p for int i 0 i lt 1000 i p gt virtualMethod something 编译器生成的代码会取消引用吗p s v
  • Imap 搜索条件 - imaplib (python)

    我正在使用 python 的 imaplib 并且遇到了一个奇怪的行为 我真的不知道这是否是 imap 或 imaplib 问题 功能 所以我希望有人能给我一些启发 在我的项目期间 我对我的 Gmail 邮箱进行了多次搜索 想象一下我使用以
  • symfony 单元测试:添加/修改表单操作

    我有一个没有操作的表单 用 javascript 提交 我试图为其编写一个单元测试 但它失败了 因为缺少 action 属性 InvalidArgumentException 当前 URI 必须是绝对 URL 有没有办法在单元测试中添加它或
  • 在派生抽象类中强制执行事件

    我正在尝试创建我所认为的翻译类 以便我的程序可以与各种目标平台对话 每个平台都将由抽象类的单独实现来处理 为了简单起见 我已经削减了一些内容 我有一个抽象类 有几个抽象方法 abstract class ControllerBase pub