gpt4 book ai didi

C# 标准 : rationale for "Do not provide public event member variables"?

转载 作者:行者123 更新时间:2023-11-30 12:16:20 26 4
gpt4 key购买 nike

IDesign 编码标准声明“不提供公共(public)事件成员变量。改用事件访问器。”

我很欣赏事件访问器在某些情况下很有用(我认为 Control 使用字典来仅存储分配的事件以节省内存)。但强制此样板代码始终存在的意义何在?

编辑:明确

public event EventHandler EventName;

对比

public event EventHandler EventName { add { ... } remove { ... } }

[参见 IDesign Coding Standard - 编码标准 - 42]

最佳答案

委托(delegate)字段不是事件 - 它们只是委托(delegate)字段。它们可以(非常不正确地)被外部调用者检查、清空和调用,这与事件的设计(通常只能由声明类处理)相反

封装允许间接、验证等;一切都令人向往。而且成本极低。这会影响代码的性能是不正常的。

它还允许它们在接口(interface)上使用;不能在接口(interface)上声明字段。


编辑:

问题有点不清楚,但如果问题只是类似字段的事件与使用委托(delegate)支持者的显式添加/删除……那是愚蠢的。不要添加不必要的代码。类似字段的事件将是首选,除非有足够的事件来保证 EventHandlerList 的实现。

特别是,4.0 编译器现在非常明智地实现了线程安全(历史上并非如此)。

关于C# 标准 : rationale for "Do not provide public event member variables"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5583159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com