转发不同类型的事件

2024-02-25

我正在尝试将事件从一个类转发到其中包含的对象(如下所述:在 C# 中转发事件 https://stackoverflow.com/questions/1065355/forwarding-events-in-c-sharp)。然而,事件的类型不同。

例如,我有一堂课Item这暴露了一个ValueChanged类型的事件处理程序EventHandler。班上ItemHaver暴露了一个EventHandler<StatusEventArgs>,每当Item.ValueChanged确实如此,但还应该提供额外的信息。我该如何正确实施add/remove to the ItemValueChanged事件声明?

在下面的代码中,lambda 函数将add方法执行正确的操作,如果是这样,处理该问题的正确方法是什么remove?

class Item
{
    public event EventHandler ValueChanged;
}

class ItemHaver
{
    private int _status;
    private Item _item;

    public event EventHandler<StatusEventArgs> ItemValueChanged
    {
        add 
        { 
            _item.ValueChanged += value; // Wrong type
            _item.ValueChanged += 
                (obj, e) => value(obj, new StatusEventArgs(this._status));
        }
        remove 
        { 
            _item.ValueChanged -= // Does this even work?
                (obj, e) => value(obj, new StatusEventArgs(this._status));  
        }
    }
}

class StatusEventArgs : EventArgs
{
    int Status { get; private set; }
    StatusEventArgs(int status) { Status = status; }
}

我会尝试使用字典来映射处理程序。

class ItemHaver
{
    private int _status;
    private Item _item;

    private Dictionary<EventHandler<StatusEventArgs>, EventHandler> handlersMap = new Dictionary<EventHandler<StatusEventArgs>, EventHandler>();

    public event EventHandler<StatusEventArgs> ItemValueChanged
    {
        add
        {
            // _item.ValueChanged += value; // Wrong type
            handlersMap.Add(value, (obj, e) => value(obj, new StatusEventArgs(this._status)));
            _item.ValueChanged += handlersMap[value];
        }
        remove
        {
            _item.ValueChanged -= handlersMap[value];
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

转发不同类型的事件 的相关文章

  • std::vector 的复制构造函数如何运行?

    一个如何std vector
  • OpenGL纹理渲染与原始不匹配

    我正在尝试使用 OpenGL 渲染纹理 我用作测试的纹理是白色背景上的一堆黑色矩形 如下所示 然而 在渲染时 纹理似乎被复制并叠加在其自身之上多次 我使用以下方法设置场景 std string vertexSource ShaderLoad
  • 使用来自本地对象的消息的 std::Exception

    以下代码是否可以安全地抛出带有自定义消息的异常 include
  • C# 中的 Culture 相当于 Java 中的 Locale 吗?

    C 使用文化的概念 这在操作上与 Java 中的 Locale 类似吗 或者底层概念是否存在显着差异 从文化而不是语言环境的角度进行工作是一种寻找正确抽象层次的尝试 从以类似方式做事的人群的角度来考虑事物 而不是谈论地理区域和语言 并有点疯
  • 使用 gcc 编译 C 时,预处理的 .i 文件中的数字意味着什么?

    我想了解编译过程 我们可以使用以下命令查看预处理器中间文件 gcc E hello c o hello i or cpp hello c gt hello i 我大致知道预处理器的作用 但我很难理解某些行中的数字 例如 1 usr incl
  • C++17 中带有 noexcept 的 std::function

    在 C 17 中noexcept 已添加到类型系统中 http www open std org jtc1 sc22 wg21 docs papers 2015 p0012r1 html void r1 void f noexcept f
  • 函数原型和数组参数

    我正在学习 C 语法 并且已经开始研究数组了 我想问你一个问题 但首先让我回顾一下 这样我就知道我已经弄清楚了 我知道您可以使用以下语法将变量定义为数组 name
  • 在 C 中声明和初始化数组

    C 有没有办法先声明然后初始化数组 到目前为止 我一直在初始化一个这样的数组 int myArray SIZE 1 2 3 4 但我需要做这样的事情 int myArray SIZE myArray 1 2 3 4 在 C99 中 您可以使
  • 按位非运算符

    为什么要按位运算 0 打印 1 在二进制中 不是0应该是1 为什么 你实际上很接近 在二进制中 不是0应该是1 是的 当我们谈论一位时 这是绝对正确的 然而 一个int其值为0的实际上是32位全零 将所有 32 个 0 反转为 32 个 1
  • 使用 MapViewOfFile 有什么限制吗?

    我正在尝试将内存映射文件用作 hFile CreateFile State Path GENERIC READ FILE SHARE READ FILE SHARE WRITE 0 OPEN EXISTING FILE FLAG SEQUE
  • 编译器在函数名称前添加下划线前缀的原因是什么?

    当我看到 C 应用程序的汇编代码时 如下所示 emacs hello c clang S O hello c o hello s cat hello s 函数名称以下划线作为前缀 例如callq printf 为什么这样做以及它有什么优点
  • 如何忽略搜索条件中的空属性

    我有一个不好的要求要做 无论如何 我必须在我的应用程序中实现它 我有一个Track class public class Track public string Name get set public string City get set
  • 复杂的 C 声明

    我刚刚在互联网上浏览了一些代码 发现了这个 float foo SIZE SIZE 我如何阅读这份声明 是否有一套特定的规则来阅读如此复杂的声明 我有一段时间没做这个了 从 开始foo然后向右走 float foo SIZE SIZE fo
  • MPI_Gatherv:根数组中收到的垃圾值

    我正在尝试实施MPI Gatherv函数于C 根据我的程序 包括 root 在内的每个进程都应该创建一个大小等于 进程的等级 1 这将在所有单元格中保持进程的等级 然后这个本地数组被收集到根的 rcv array 中 不知何故 我得到了垃圾
  • 如何最好地为 Visual Studio 2017 构建的 CMake C++ 项目设置输出目录?

    我使用 Visual Studio 2017 使用 vcxproj 文件构建 C 桌面项目 我喜欢默认行为 其中输出目录是项目下面的子目录 例如 myproj sln myproj vcxproj x64 myproj release my
  • 序列化时如何跳过 xml 声明?

    我正在尝试输出一个没有 xml 头的 xml 文件 例如 我试过 Type t obj GetType XmlSerializer xs new XmlSerializer t XmlWriter xw XmlWriter Create c
  • 在 C++ 中将大型数据向量写入/读取到二进制文件

    我有一个 C 程序 它通过将 ascii 文件中的网格人口数据读取到大型 8640x3432 元素双精度向量中来计算给定半径内的人口 将 ascii 数据读入向量大约需要 30 秒 循环每列和每行 而程序的其余部分只需要几秒钟 我被要求通过
  • MonoGame 中的 ContentLoadException

    我一直在尝试使用 Xamarin Studio 在 MonoGame 中加载纹理 我的代码设置如下 region Using Statements using System using Microsoft Xna Framework usi
  • 即使对于新上下文,OnModelCreating 也仅调用一次

    我有多个相同但内容不同的 SQL Server 表 在编写代码优先 EF6 程序时 我尝试为每个程序重用相同的数据库上下文 并将表名称传递给上下文构造函数 然而 虽然每次都会调用构造函数 但尽管每次都是从 new 创建数据库上下文 但 On
  • 如何使用字符串的值将字符串转换为 wstring?

    我是 C 新手 我有这个问题 我有一个名为 DATA DIR 的字符串 需要将其格式化为 wstring string str DATA DIR std wstring temp L s str Visual Studio 告诉我没有与参数

随机推荐

  • 纯 CSS 使字体大小根据动态字符数量进行响应

    我知道用 Javascript 可以很容易地解决这个问题 但我只对纯 CSS 解决方案感兴趣 我想要一种动态调整文本大小的方法 以便它始终适合固定的 div 这是示例标记 div style width 200px height 1em p
  • JavaScript 跨浏览器:将字符串视为数组是否安全?

    这段代码在所有主流浏览器中都安全吗 var string 123 alert string 1 2 should alert true 不 这不安全 Internet Explorer 7 不支持按索引访问字符串 你必须使用charAt兼容
  • 如何在 swiftui 中添加自定义圆形滑动操作?

    在我的 SwiftUI 应用程序中 我想在 ListView 中设计圆形滑动操作 如以下示例所示 天气应用程序 iOS 15 我知道您可以添加这样的自定义操作 List Text Pepperoni pizza swipeActions B
  • PHP 或 MySQL 中的业务逻辑?

    在具有合理流量的网站上 如果将应用程序 业务逻辑编写为存储过程 触发器和视图 而不是编写在 PHP 代码本身中 这会重要吗 牢记可扩展性的最佳方法是什么 我无法向您提供统计数据 但除非您计划将来将 PHP 更改为另一种语言 否则我可以说将业
  • 使用 graph api 2.2 从 android 中的 facebook sdk 4.0.1 获取好友列表

    我在进行一些搜索后用于获取列表的代码如下 GraphRequestBatch batch new GraphRequestBatch GraphRequest newMyFriendsRequest accessToken new Grap
  • pg_dump 忽略表顺序?

    我最近一直在玩 PostgreSQL 并且无法理解如何备份和恢复单个表 我使用 pgadmin3 备份数据库中的单个表 以便将其复制到不同的服务器 当我尝试对文件执行 pg restore 时 收到错误消息 指出该序列不存在 pg rest
  • XmlHttpRequest.onload 未调用

    我正在玩这个XmlHttpRequest事物 在一些教程和书籍中 它是onload请求完成时调用的函数 在我的小实验中 这个函数从未被调用 这是我的代码 window onload function var url http www goo
  • 渐变剪切似乎在“无”上窒息

    我正在尝试向我的图表添加渐变裁剪 我使用了这里推荐的方法 如何在tensorflow中有效应用梯度裁剪 https stackoverflow com questions 36498127 how to effectively apply
  • Django 官方教程第 1 部分:运行时错误:cmp 中超出最大递归深度

    根据 django 教程 我创建了项目并执行了manage py runserver 如教程中所述 并且我收到错误 RuntimeError cmp 中超出了最大递归深度 有什么办法可以纠正这个问题吗 我得到这个错误 Validating
  • GoLang - 内存分配 - []byte 与 string

    在下面的代码中 c fool d byte fool fmt Printf c T d n c unsafe Sizeof c 16 bytes fmt Printf d T d n d unsafe Sizeof d 24 bytes 为
  • 非被动滚动事件处理程序的控制台警告

    当我使用 bootstrap vue 中的 Form Select 时 出现此控制台错误 我正在使用谷歌浏览器 违规 向滚动阻塞 鼠标滚轮 事件添加了非被动事件侦听器 考虑将事件处理程序标记为 被动 以使页面响应更快 我使用 axios 从
  • indexpath.row 从 1 而不是 0 开始

    我面临着 uitableview 的问题 有时 当我的表的 datasource numberofrowsinsection 有 3 个值时 cellforowatindexpath 从 0 1 而不是 0 0 开始 有人可以帮我找出发生此
  • 在 Swing 中使图像按钮看起来被按下/单击

    我创建了一个 JButton 其中有一个图像设置为代表该按钮的图标 现在 我已经设置了 setContentAreaFilled false setBorderPainted false setOpaque false 这些属性使图像按钮看
  • 多行字符串文字的语法突出显示

    我有一种自定义语言 我想在 Visual Studio Code 中为其提供语法突出显示 在这种语言中 字符串文字以双引号或单引号开头和结尾 以双引号开头的字符串文字可以包含单引号 反之亦然 不会发生任何其他引号转义 但无论起始引号类型如何
  • 将菜单项添加到 Quickbooks

    是否可以使用 QBSDK 将菜单项添加到 Quickbooks 我发现了一些我无法工作的旧例子 我已经为我的公司创建了一个自定义应用程序 并尝试通过在 Quickbooks 中创建一个菜单项来简化它 任何帮助将不胜感激 这是我到目前为止所尝
  • 替换嵌套括号中的内容

    Input ABCDEF 3 abcdef GHIJKLMN 4 5 Value OPQRSTUVW 4 5 Value 3 预期输出 ABCDEF GHIJKLMN OPQRSTUVW 到目前为止尝试过 Output Input repl
  • 单元测试 - 如何测试仅插入日志消息的“void”方法(Serilog)

    我需要测试类型的方法void 它只是使用 LOG 框架在我的 LOG 变量上插入一条消息 Serilog https serilog net 参见实现示例 public class MyClass public MyClass ILogge
  • 如何在cloudfoundry上使用kafka和storm?

    我想知道是否可以将 kafka 作为云原生应用程序运行 以及我是否可以在 Pivotal Web Services 上创建一个 kafka 集群作为服务 我不仅仅想要客户端集成 我想运行 kafka 集群 服务本身 谢谢 阿尼尔 我可以向您
  • 为什么 Tkinter 中计算的字符串宽度和高度(以像素为单位)在不同平台上有所不同?

    我有一个 Python 脚本 需要计算以任意字体显示的任意字符串的确切大小 以便生成简单的图表 我可以使用 Tkinter 轻松做到这一点 import Tkinter as tk import tkFont root tk Tk canv
  • 转发不同类型的事件

    我正在尝试将事件从一个类转发到其中包含的对象 如下所述 在 C 中转发事件 https stackoverflow com questions 1065355 forwarding events in c sharp 然而 事件的类型不同