Аргументы для делегирования. BeginInvoke являются копиями или ссылками? - PullRequest
1 голос
/ 22 апреля 2010

Где находится документация по обработке аргументов для 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 Ответ

1 голос
/ 22 апреля 2010

Метод получает ссылку на объект.

Объекты не копируются в .NET, если вы специально не создаете копию.

...