Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用(这个)做什么?_C#_This_Invoke - Fatal编程技术网

C# 调用(这个)做什么?

C# 调用(这个)做什么?,c#,this,invoke,C#,This,Invoke,我正在学习编程(通过在线资源自学),我遇到了这段代码。我很难理解它。我不理解最后一行。调用(此项) 我搜索并阅读了许多资源(在MSN和此处),如果我正确理解了这一点,那么这部分代码将检查onimadded是否为空,然后这部分代码将再次执行?如果无法将项目添加到列表中,则OneMaded是否不为空?我是否正确阅读和理解了这一行?请查看为什么使用空检查。在c#6.0之前,在调用之前将引用复制到局部变量是一种很好的做法。这将有助于多线程和订阅服务器在空检查和调用之间取消订阅 这种形式有几个原因: 如

我正在学习编程(通过在线资源自学),我遇到了这段代码。我很难理解它。我不理解最后一行。调用(此项)

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

请查看为什么使用空检查。在c#6.0之前,在调用之前将引用复制到局部变量是一种很好的做法。这将有助于多线程和订阅服务器在空检查和调用之间取消订阅

这种形式有几个原因:

  • 如果evt!=空检查确保我们不尝试调用空值 代表。如果没有人将事件处理程序连接到 事件
  • 在多线程场景中,由于委托是 不可变,一旦我们将委托的本地副本获取到evt中, 我们可以在检查非null之后安全地调用它,因为没有人可以这样做 在if之后但在调用之前更改它
请查看使用空检查的原因。在c#6.0之前,在调用之前将引用复制到局部变量是一种很好的做法。这将有助于多线程和订阅服务器在空检查和调用之间取消订阅

这种形式有几个原因:

  • 如果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);
}