C# 调用(这个)做什么?
我正在学习编程(通过在线资源自学),我遇到了这段代码。我很难理解它。我不理解最后一行。调用(此项) 我搜索并阅读了许多资源(在MSN和此处),如果我正确理解了这一点,那么这部分代码将检查C# 调用(这个)做什么?,c#,this,invoke,C#,This,Invoke,我正在学习编程(通过在线资源自学),我遇到了这段代码。我很难理解它。我不理解最后一行。调用(此项) 我搜索并阅读了许多资源(在MSN和此处),如果我正确理解了这一点,那么这部分代码将检查onimadded是否为空,然后这部分代码将再次执行?如果无法将项目添加到列表中,则OneMaded是否不为空?我是否正确阅读和理解了这一行?请查看为什么使用空检查。在c#6.0之前,在调用之前将引用复制到局部变量是一种很好的做法。这将有助于多线程和订阅服务器在空检查和调用之间取消订阅 这种形式有几个原因: 如
onimadded
是否为空,然后这部分代码将再次执行?如果无法将项目添加到列表中,则OneMaded
是否不为空?我是否正确阅读和理解了这一行?请查看为什么使用空检查。在c#6.0之前,在调用之前将引用复制到局部变量是一种很好的做法。这将有助于多线程和订阅服务器在空检查和调用之间取消订阅
这种形式有几个原因:
- 如果evt!=空检查确保我们不尝试调用空值 代表。如果没有人将事件处理程序连接到 事件
- 在多线程场景中,由于委托是 不可变,一旦我们将委托的本地副本获取到evt中, 我们可以在检查非null之后安全地调用它,因为没有人可以这样做 在if之后但在调用之前更改它
- 如果evt!=空检查确保我们不尝试调用空值 代表。如果没有人将事件处理程序连接到 事件
- 在多线程场景中,由于委托是 不可变,一旦我们将委托的本地副本获取到evt中, 我们可以在检查非null之后安全地调用它,因为没有人可以这样做 在if之后但在调用之前更改它
onimadded
不为空,则使用this
和item
参数调用它,否则什么也不做”这是否回答了您的问题?我不明白你为什么认为代码又被调用了此
是对类的当前实例的引用。onimadded
似乎是一个事件。如果当前未订阅此事件,则为null<代码>调用将引发事件。如果(onimadded!=null)onimadded(此项),则该行(或多或少)是的快捷方式
onimadded
是一个事件(它对事件的名称错误,因为引发此事件的方法的名称是…On)<代码>事件。调用将引发事件(调用所有已订阅的事件处理程序)event?.Invoke
是一个带有null检查的线程安全调用。“如果onimadded
不为null,则使用this
和项
参数调用它,否则什么都不做”这是否回答了您的问题?我不明白你为什么认为代码又被调用了此
是对类的当前实例的引用。onimadded
似乎是一个事件。如果当前未订阅此事件,则为null<代码>调用将引发事件。如果(onimadded!=null)onimadded(此项),则该行(或多或少)是的快捷方式
onimadded
是一个事件(它对事件的名称错误,因为引发此事件的方法的名称是…On)<代码>事件。调用将引发事件(调用所有已订阅的事件处理程序)<代码>事件?.Invoke是一个带有空检查的线程安全调用。谢谢!!!这真的帮助我理解了这行代码!非常感谢。很高兴能帮助@Bumbar!谢谢这真的帮助我理解了这行代码!非常感谢。很高兴能帮助@Bumbar!
public async Task AddItem(TodoItem item)
{
await CreateConnection();
await connection.InsertAsync(item);
OnItemAdded?.Invoke(this, item);
}