C# 调用 (this, ,) 做什么?

C# what does invoke(this, ,) do?

我正在学习编程(通过在线资源自学)并且遇到了这段代码。我很难理解它。只看最后一行OnItemAdded?.Invoke(this, item)

public async Task AddItem(TodoItem item)
{
   await CreateConnection();
   await connection.InsertAsync(item);
   OnItemAdded?.Invoke(this, item);
}

我搜索并阅读了很多资源(在 MSN 和此处),如果我理解正确,那么这部分代码会检查 OnItemAdded 是否不为空,然后再次执行这部分代码?如果无法将项目添加到列表,OnItemAdded 不为空?我是否正确阅读和理解了这一行?

请参阅 了解为什么使用 null-check。在 c# 6.0 之前,最好在调用之前将引用复制到局部变量。这将有助于 multi-threading 和订阅者,在 null-check 和调用之间取消订阅。

这种形式有几个原因:

  • if evt != null 检查确保我们不会尝试调用 null 代表。如果没有人将事件处理程序连接到 活动
  • 在多线程场景中,因为委托是 不可变的,一旦我们获得了委托到 evt 的本地副本, 我们可以在检查 non-null 后安全地调用它,因为没有人可以 在 if 之后但在调用之前更改它。