c# - C# 调用(this, ,) 做什么?
问题描述
我正在学习编程(通过在线资源自学),我遇到了这段代码。我很难理解它。我不明白只有最后一行OnItemAdded?.Invoke(this, item)
public async Task AddItem(TodoItem item)
{
await CreateConnection();
await connection.InsertAsync(item);
OnItemAdded?.Invoke(this, item);
}
我搜索并阅读了许多资源(在 MSN 和此处),如果我理解正确,那么这部分代码检查是否OnItemAdded
不为空,然后再次执行这部分代码?如果OnItemAdded
它未能将项目添加到列表中,它不为空吗?我是否正确阅读并理解了这一行?
解决方案
请参阅此答案,了解为何使用空检查。在 c# 6.0 之前,在调用之前将引用复制到局部变量是一种很好的做法。这将有助于多线程和订阅者在空检查和调用之间取消订阅。
这种形式有几个原因:
- if evt != null 检查确保我们不会尝试调用 null 委托。如果没有人将事件处理程序连接到事件,就会发生这种情况
- 在多线程场景中,由于委托是不可变的,一旦我们获得了委托的本地副本到 evt,我们可以在检查非 null 后安全地调用它,因为没有人可以在 if 之后但在调用之前更改它。
推荐阅读
- spring-boot - 如何解决问题 RestControllerAdivse 不起作用?
- jmeter - 运行时自定义 JMeter 属性的限制值
- activemq - 通过网络连接器连接的代理之间持久订阅的clientid是否唯一?
- php - wp-cli 达到 120 秒的最大执行时间
- c# - 我如何为我的上传函数 C# 设置延迟方法
- mobaxterm - MobaXterm 创建了 `xwin_mobax.exe` 还是病毒?
- java - 使用 ID 从数组中删除元素
- excel - Excel VBA 中的工作簿事件
- node.js - 如何通过 GKE pod 访问 Google Cloud Storage 中的文件
- snowflake-cloud-data-platform - 雪花中的不等于究竟如何工作?