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 之后但在调用之前更改它。
我正在学习编程(通过在线资源自学)并且遇到了这段代码。我很难理解它。只看最后一行OnItemAdded?.Invoke(this, item)
public async Task AddItem(TodoItem item)
{
await CreateConnection();
await connection.InsertAsync(item);
OnItemAdded?.Invoke(this, item);
}
我搜索并阅读了很多资源(在 MSN 和此处),如果我理解正确,那么这部分代码会检查 OnItemAdded
是否不为空,然后再次执行这部分代码?如果无法将项目添加到列表,OnItemAdded
不为空?我是否正确阅读和理解了这一行?
请参阅
这种形式有几个原因:
- if evt != null 检查确保我们不会尝试调用 null 代表。如果没有人将事件处理程序连接到 活动
- 在多线程场景中,因为委托是 不可变的,一旦我们获得了委托到 evt 的本地副本, 我们可以在检查 non-null 后安全地调用它,因为没有人可以 在 if 之后但在调用之前更改它。