【发布时间】:2010-10-22 14:17:05
【问题描述】:
如果参数是对对象的引用,异步调用将传递引用还是对象的副本(通过编组)?
【问题讨论】:
标签: c# asynchronous delegates
如果参数是对对象的引用,异步调用将传递引用还是对象的副本(通过编组)?
【问题讨论】:
标签: c# asynchronous delegates
如果参数是对对象的引用(即引用类型),那么传递给方法的就是引用。但是,使用 ref 关键字传递的值类型并非如此。本文有相关示例(图13和14):http://msdn.microsoft.com/en-us/magazine/cc301332.aspx
编组与应用程序域之外的通信有关,因此它与异步调用的委托本身无关。
【讨论】:
据我所知,仅通过异步调用委托就不会发生对象编组。下面是一些代码来显示异步委托调用,传递一个对象引用。
public class Car
{
public string Model { get; set; }
}
public delegate void TransformHandler(Car car);
public static void Transform(Car car)
{
car.Model = "Holden";
}
static void Main(string[] args)
{
Car car = new Car();
car.Model = "Ford";
new TransformHandler(Transform).BeginInvoke(car, null, null);
Thread.Sleep(100);
Console.WriteLine(car.Model); // Prints "Holden", so it wasn't marshalled
}
【讨论】:
为什么不自己编写一个小示例来看看呢?
(我相信“参考”就是答案。)
【讨论】: