delegate.BeginInvoke的参数是副本还是引用?

时间:2010-04-21 20:04:54

标签: .net delegates pass-by-reference

哪里有关于BeginInvoke参数处理的文档?

如果我有一个委托(包装我的处理函数)接受一个对象作为参数,该对象是否被异步调用的处理函数复制或引用?

delegate void MyDelegate(SomeObject obj);

// later on:
// invoke the delegate async'ly:
new MyDelegate(StaticClass.HandlerFunc).BeginInvoke(objInstance, null, null);
// alter the object:
objInstance.SomeProperty = newValue;

// function:
public static void HandlerFunc(SomeObject obj) {
   // is it a possible race condition to read SomeProperty:
   if(obj.SomeProperty == oldValue) {
      // will possibly never enter?
   }
   // ... etc.
}

1 个答案:

答案 0 :(得分:1)

该方法获取对象的引用。

除非您专门创建副本,否则不会在.NET中复制对象。