Delegate.Invoke和代表之间的差异()(Difference between Deleg

2019-06-21 10:52发布

delegate void DelegateTest();

DelegateTest delTest;

什么叫之间的区别delTest.Invoke()delTest() 双方将执行当前线程上的委托,对不对?

Answer 1:

delTest()形式是编译器辅助,它的下面是一个真正的调用Invoke()



Answer 2:

理查德的答案是正确的,但是与C#6.0开始,存在一个使用情况Invoke()直接可能是有利的,因为另外的空条件运算符 。 每MS docs-

对于空有条件成员访问的另一个用途是用更少的代码调用代表以线程安全的方式。 旧的方式需要类似下面的代码:

var handler = this.PropertyChanged;
if (handler != null)  
    handler(…);

新的方法要简单得多:

PropertyChanged?.Invoke(…)   

新方法是线程安全的,因为编译器生成的代码只评估的PropertyChanged一次,保持结果在一个临时变量。 您需要显式调用Invoke方法,因为没有空条件委托调用语法的PropertyChanged?(E)。



Answer 3:

这是正确的。 两者都有完全相同的结果。

既然你已经正确初始化delTest当然。



文章来源: Difference between Delegate.Invoke and Delegate()
标签: c# delegates