【发布时间】:2020-08-17 21:57:53
【问题描述】:
我正在学习编程(通过在线资源自学)并且遇到了这段代码。我很难理解它。我只看不懂最后一行OnItemAdded?.Invoke(this, item)
public async Task AddItem(TodoItem item)
{
await CreateConnection();
await connection.InsertAsync(item);
OnItemAdded?.Invoke(this, item);
}
我搜索并阅读了许多资源(在 MSN 和此处),如果我理解正确,那么这部分代码会检查 OnItemAdded 是否不为空,那么这部分代码是否会再次执行?并且OnItemAdded 不为空,以防无法将项目添加到列表中?我是否正确阅读并理解了这一行?
【问题讨论】:
-
"如果
OnItemAdded不为空,则使用this和item参数调用它,否则什么都不做" -
这能回答你的问题吗? what is invoking?
-
我不明白您为什么认为代码再次被调用。
this是对当前类实例的引用。 -
OnItemAdded似乎是一个事件。如果当前没有订阅此事件,则为 null。Invoke将引发该事件。该行(或多或少)是if (OnItemAdded != null) OnItemAdded(this, item);的快捷方式 -
OnItemAdded是一个事件(它有错误的事件名称,因为On..名称 should be used 用于引发此事件的方法)。event.Invoke将引发事件(调用所有订阅的事件处理程序)。event?.Invoke是一个带有空值检查的线程安全调用。