关于set变更通知涉及的一些知识点

这篇具有很好参考价值的文章主要介绍了关于set变更通知涉及的一些知识点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

public class Person {
    private string name;

    public string Name {
        get { return name; }
        set {
            if (name != value) {
                name = value;
                OnNameChanged();
            }
        }
    }

    public event EventHandler NameChanged;

    protected virtual void OnNameChanged() {
        NameChanged?.Invoke(this, EventArgs.Empty);
    }
}

在这个示例中,我们声明了一个私有字段 _name 作为存储名称的后端字段,并将其封装在公共属性 Name 中。在 setter 方法中,我们首先检查新值是否与旧值相同。如果不同,我们才更新存储字段,并调用 OnNameChanged() 方法来引发 NameChanged 事件。

注意,OnNameChanged 方法是使用 protected 访问修饰符进行定义的。这允许在继承类中覆盖此方法,并添加进一步的处理逻辑。在此方法中,我们通过执行空检查来安全地调用 NameChanged 事件,以确保未向事件委托传递 null 引用。

现在,你可以订阅 NameChanged 事件,并在每次 Name 属性更改时收到通知:

var person = new Person();
person.NameChanged += (sender, e) => {
    Console.WriteLine($"Name changed to: {((Person)sender).Name}");
};

person.Name = "Alice"; // "Name changed to: Alice" 将被输出到控制台
person.Name = "Bob";   // "Name changed to: Bob" 将被输出到控制台

在此例中,我们创建了一个新的 Person 对象,并订阅了其 NameChanged 事件。然后,我们两次设置该对象的 Name 属性,从而引发对应的事件并显示名称已更改的消息。

这段代码涉及以下知识点:

  1. 事件:NameChanged 是一个事件,它是 Person 类中声明的一个类型为 EventHandler 的公共事件。通过这个事件,Person 类向其他对象(比如现在正在编写的代码)通知其名称属性已更改。
  2. 匿名函数:=> 符号后面跟着一段匿名函数表达式,它被传递给 NameChanged += 的右侧。这个匿名函数接受两个参数 sender 和 e,它们分别表示触发事件的对象和事件数据。匿名函数的主体内有一行代码,输出一个字符串,其中包含名称属性新的值,以及触发事件的对象的名称。
  3. 字符串插值(string interpolation):使用 $ 符号将字符串格式化为带大括号 {} 的占位符,表示需要插入变量或表达式的位置。大括号内的表达式是一个用圆括号括起来的成员访问表达式,它在运行时被求职,用于获取修改后的名称属性的值。

NameChanged += 的加号是什么意思?

+= 表示向事件添加一个处理程序(event handler)。在这种情况下,它将匿名函数赋值给 NameChanged 事件。当 NameChanged 事件被触发时,事件发出通知以便所有已注册的事件处理程序都能执行其逻辑操作。通过使用 += 操作符,可以将多个事件处理程序添加到同一事件中,从而实现事件的多播 (Multicasting)。

public event EventHandler NameChanged; 这段代码是什么意思?

这段代码定义了一个 NameChanged 事件,它使用 EventHandler 委托来表示事件处理程序的方法。 EventHandler 委托是 .NET 框架中预定义的一种类型,用于表示不接受任何参数并返回空值的方法。

此外,event 关键字声明了该字段为一个事件,该事件只能在类内部被触发和订阅。 这意味着其他代码无法直接触发或调用该事件。 若要触发该事件,必须通过调用它的公共方法来实现。 例如,在该类中可能有一个名为 OnNameChanged 的保护虚拟方法,该方法会立即引发 NameChanged 事件。 泛型版本的 EventHandler<TEventArgs> 委托也可用于代替 EventHandler 委托,以提供更强类型的事件参数。文章来源地址https://www.toymoban.com/news/detail-476386.html

到了这里,关于关于set变更通知涉及的一些知识点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++11一些知识点

    1、C++11实现生产者与消费者模型 2、unique_lock与lock_guard的比较 引用自:施磊老师的《C++高级课程》

    2024年02月12日
    浏览(40)
  • PLSQL一些常用的知识点

    此处简单的记录一下在 oracle中如何使用plsql语法,记录一些简单的例子,防止以后忘记。 统计总共有多少个学生,并进行if判断。 输出1到100 需要放到 execute immediate 中执行,否则会报错。 存在更新,不存在插入。 包头 可以简单的理解 java 中的接口。 包体 可以简单的理解

    2024年02月04日
    浏览(40)
  • mysql innodb一些知识点

    1、事务和锁的关系; 在MySQL事务中,只要开始了一次事务,就会自动加上一个共享锁(Shared Lock)。这个锁会在事务结束时自动释放。如果在事务中需要更新某个数据对象,那么MySQL会将该数据对象的共享锁升级为排他锁(Exclusive Lock),这可以确保在其他事务中对该数据对象

    2024年02月14日
    浏览(39)
  • Vue项目实战——【基于 Vue3.x + Vant UI】实现一个多功能记账本(项目演示、涉及知识点、源码分享)

    1、前言 如果你对 vue3.x 的基础知识还很陌生,推荐先去学习一下 vue 基础 内容 参考链接 Vue2.x全家桶 Vue2.x全家桶参考链接 Vue3.x知识一览 Vue3.x重点知识参考链接 如果你 刚学完 vue3 , 想检查一下自己的学习成果 如果你 已学完 vue3 , 想快速回顾复习所学知识 如果你 已精通

    2024年01月18日
    浏览(53)
  • 分享刷题的一些小知识点--4.9日

    1.string库提供了 、、==、=、=、!= 等比较运算符,比如两个字符串s和t,直接(s==t)是正确的。 2.unordered_map 容器,直译过来就是\\\"无序 map 容器\\\"的意思。所谓“无序”,指的是 unordered_map 容器不会像 map 容器那样对存储的数据进行排序。换句话说,unordered_map 容器和 map 容器仅有

    2023年04月11日
    浏览(48)
  • 使用es必须要知道的一些知识点:索引篇

    在当今数据驱动的世界中,Elasticsearch(简称ES)成为了一个强大而广泛应用的搜索和分析引擎。ES提供了快速、可扩展且高度可靠的数据存储和检索解决方案。然而,要真正掌握ES的各种功能和最佳实践,需要通过实践才能获得真正的知识。 在Elasticsearch(ES)中,index操作和

    2024年02月08日
    浏览(43)
  • 传输层中一些零碎且易忘的知识点

    端口号:共两个字节 不同类型的端口号: 服务端端口号 熟知端口号:0~1023 登记端口号:1024~49151 客户端使用端口号(短暂/临时端口号):49152~65535 要记得常见应用程序的熟知端口号 FTP:21 TELNET:23 SMTP:25 DNS:53 TFTP:69 HTTP:80 SNMP:161 首部与伪首部: 伪首部中协议字

    2024年02月15日
    浏览(39)
  • 网络层中一些零碎且易忘的知识点

    异构网络:指传输介质、数据编码方式、链路控制协议以及数据单元格式和转发机制不同,异构即物理层和数据链路层均不同 虚电路:网络层可以向传输层提供两种类型的服务,面向连接的服务称为虚电路服务,而无连接的服务称为数据报服务。虚电路的想法是避免为发送的

    2024年02月15日
    浏览(42)
  • 数据结构中一些零碎且易忘的知识点

    第一章 绪论 数据结构包含三个方面的内容: 数据的逻辑结构:描述数据之间逻辑关系的、与数据的存储无关的数学模型。相同的逻辑结构可使用不同的存储结构存储,如线性表既可顺序存储,也可链式存储 线性结构:一个线性表是n个具有相同特性的数据元素的有限序列 一

    2024年02月14日
    浏览(41)
  • 关于Docker的知识点

    Docker是一个快速交付应用、运行应用的技术。 Docker基本操作--容器 示例:创建运行一个Nginx容器

    2024年02月15日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包