事件 - 命名约定和风格

2024-01-02

我正在学习 C# 中的事件/委托。我可以询问您对我选择的命名/编码风格(摘自《Head First C#》一书)的看法吗?

明天我要教一个朋友这个问题,并试图想出最优雅的方式来解释这些概念。 (认为​​理解一门学科的最好方法就是尝试并教授它!)

class Program
    {
        static void Main()
        {
            // setup the metronome and make sure the EventHandler delegate is ready
            Metronome metronome = new Metronome();

            // wires up the metronome_Tick method to the EventHandler delegate
            Listener listener = new Listener(metronome);
            metronome.OnTick();
        }
    }

public class Metronome
    {
        // a delegate
        // so every time Tick is called, the runtime calls another method
        // in this case Listener.metronome_Tick
        public event EventHandler Tick;

        public void OnTick()
        {
            while (true)
            {
                Thread.Sleep(2000);
                // because using EventHandler delegate, need to include the sending object and eventargs 
                // although we are not using them
                Tick(this, EventArgs.Empty);
            }
        }
    }

public class Listener
    {
        public Listener(Metronome metronome)
        {
            metronome.Tick += new EventHandler(metronome_Tick);
        }

        private void metronome_Tick(object sender, EventArgs e)
        {
            Console.WriteLine("Heard it");
        }
    }

注:代码重构自http://www.codeproject.com/KB/cs/simplesteventexample.aspx http://www.codeproject.com/KB/cs/simplesteventexample.aspx


Microsoft 实际上已经编写了一套广泛的命名指南并将其放入 MSDN 库中。您可以在这里找到这些文章:命名指南 https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/naming-guidelines

除了一般的大写准则外,以下是页面上“事件”的内容类型成员的名称 https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-type-members#names-of-events:

✔️ 请用动词或动词短语来命名事件。

例子包括Clicked, Painting, DroppedDown, 等等。

✔️ 请使用现在时和过去时为事件命名,并带有前后的概念。

例如,在窗口关闭之前引发的关闭事件将被调用Closing,并且在窗口关闭后引发的一个将被调用Closed.

❌ 不要使用“之前”或“之后”前缀和后缀来表示事件之前和之后。如前所述使用现在时和过去时。

✔️ DO 使用“EventHandler”后缀命名事件处理程序(用作事件类型的委托),如以下示例所示:

public delegate void ClickedEventHandler(object sender, ClickedEventArgs e);

✔️ 请使用两个名为sender and e在事件处理程序中。

sender 参数表示引发事件的对象。发送者参数通常是类型object,即使可以采用更具体的类型。

✔️ 请使用“EventArgs”后缀命名事件参数类。

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

事件 - 命名约定和风格 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • UICollectionView 顶部和侧面的浮动标题

    如何在 a 中实现标头UICollectionView 我知道您可以放入补充视图 但我不知道如何使它们 浮动 在部分上方 例如标题中的标题UITableView do 这是我的情况 我有一个collectionView单元格以网格格式布局
  • 如何在 Clojure 中编写 monoid 协议?

    由于显而易见的原因 以下内容不起作用 defprotocol Monoid mappend a b mzero mzero有零参数 并且协议中不允许 或没有意义 零参数方法 在 Haskell 或 Scala 中 调度是基于类型而不是基于值
  • 如何根据 ASP.NET MVC 中用户的选择对列表进行排序?

    我有一个客户列表 可以根据用户的选择按 1 到 6 个字段进行排序 排序字段可以按任何顺序 如果我提前知道字段和顺序 排序就很容易 customers customers OrderBy c gt c LastName ThenBy c g
  • 如何在 ASP.NET Core 中实现复选框列表?

    我希望在 ASP NET Core 中实现复选框列表 但面临一些困难 我的视图模型 public class GroupIndexViewModel public Filter Filters get set public class Fi
  • 导航栏无法通过 bootstrap5 在移动设备上扩展

    我正在使用 Bootstrap 5 制作一个网站 但我的导航栏不起作用 当我在移动设备上时 它不会扩展 import url https fonts googleapis com css2 family Poppins ital wght
  • 如何通过蓝牙使用 Android 应用程序连接到 Raspberry pi

    我无法使用应用程序通过蓝牙将智能手机连接到树莓派 我的情况 我正在开发一个基于树莓派的蓝牙可控应用程序 我可以通过蓝牙连接到树莓派 并使用应用程序 蓝牙终端 通过 RFCOMM 套接字发送和接收数据 树莓派不断监听 RFCOMM 连接 My
  • Android中如何获取电话号码?

    这是问题的延伸here https stackoverflow com questions 6329216 how to obtain mobile number of own device in android 现在我引用通用软件 htt
  • iPhone SDK-调试器错误:正在调试的程序未运行

    我按照 iPhone SDK 开发人员门户上的确切说明启动了第一页上的 Assistant 但即使我多次删除配置文件 证书并多次重复相同的过程 我仍然遇到相同的错误 请帮忙 如果您以前使用过它们 检查 NSDebugEnabled NSZo
  • 如何在 RDLC Microsoft Dynamic NAV 2013 报告中显示 Unicode 字符?

    我在 RDLC 报告中添加了一个文本框 并将其值设置为 unicode 字符 但当我运行报告时 我只得到了 符号 请帮我解决这个问题 我希望在报告中看到 unicode 字符 I had the same problem and found
  • Adobe AIR 有什么意义? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有点困惑 我不断看到有关 Adob e AIR 如何让您下载在桌面上运行的应用程序的文章 我们不是已经有了这个吗 这与任何 WinForms
  • 为现有 GitHub 存储库创建 CocoaPod

    最近我创建了一个小型 iOS 类 我想将它与 CocoaPods 一起使用 现在我已经将它添加到GitHub https github com cloverstudio CSGrowingTextView我已经关注了本教程 http nss
  • Eclipse 随机停止启动

    我最近经常使用Eclipse 并且没有遇到任何问题 昨晚 我的工作非常顺利 然而 今天早上 每当我加载它时 程序都会在加载初始屏幕的一半位置停止工作 在实际工作区打开之前 该信息显示 正在加载工作台 并且永远留在那里 当我多次单击它时 我收
  • pyqtgraph:缩放时保持 TextItem 的恒定位置

    我想要一个在缩放 y 轴时在图表上保持恒定位置的 TextItem 其功能与图例基本相同 只是作为 TextItem 我可以根据需要更改文本 我不知道该怎么做 欢迎任何建议 这个例子说明了问题 在左侧图表中 缩放 y 轴会导致文本移动 而在
  • Python3.5.2 bdist_wininst:需要Python版本-32,在注册表中找不到

    我在 Windows 7 上使用 Python 3 5 2 32 位创建的包出现问题 我通常使用以下命令在 Windows 上部署 Python 包bdist wininst设置工具的选项 这样 我的同事只需启动 Windows 安装程序
  • 连接两个 mp4 视频后视频中出现奇怪的“暂停”

    我正在连接两个 mp4 视频 问题是第一个视频 intro mp4 持续 5 秒 第二个视频 output mp4 持续 2 秒 连接它们创建的视频持续 9 秒 应该持续 5 2 7 秒 在 Final mp4 视频中 第一个视频 intr
  • 在 WooCommerce 中获取并显示相关产品

    我已将 WooCommerce 相关产品包含在主题中 内容如下 这已被复制到我的模板中并正在执行 然而 尽管我对该产品添加了各种追加销售 related products变量 在循环中使用 为 NULL 为了开始展示这些相关产品 是否还有其
  • ARKit:查找屏幕上SCNNode的坐标

    我有一个简单的 Swift ARKit 设置 其中有一个 SCNNode 和一个在 ARSCNView 中可见的 3D 对象 我想确定该对象在 ARSCNView 上的 2D 坐标 我的意思是对象被绘制到屏幕上时的 x 和 y 坐标 I h
  • 运行较少的服务器端与客户端

    与服务器端相比 在客户端运行 LESS 框架有哪些优点 缺点 如果在客户端运行页面加载时间会受到影响吗 在服务器上 您必须更加小心缓存控制标头 并且会牺牲一点 CPU 能力 在客户端 如果 JS 不可用 它就会中断 对于您的生产系统 在构建
  • 代码辅助 (ctrl+space) 在 Eclipse Kepler 上不起作用 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Code assist ctrl space doesn t work on Eclipse Kepler This happened t
  • 事件 - 命名约定和风格

    我正在学习 C 中的事件 委托 我可以询问您对我选择的命名 编码风格 摘自 Head First C 一书 的看法吗 明天我要教一个朋友这个问题 并试图想出最优雅的方式来解释这些概念 认为 理解一门学科的最好方法就是尝试并教授它 class