delegate void MyDelegate();
struct MyStruct
{
public string mem;
public void method()
{
Console.WriteLine(mem);
}
}
static void Main()
{
MyDelegate md;
MyStruct ms = new MyStruct();
ms.mem = "A";
md = ms.method;
ms.mem = "B";
md();
}
本来以为结果显示 B,但是显示 A,但是 struct换成class就显示B。难道因为struc是值类型,委托对象就复制struct完整的对象吗?
------解决思路----------------------
值类型和引用类型在使用的时候最主要的区别是什么?值类型传递的是值的副本,引用类型传递的都是对象的引用。
------解决思路----------------------
c#中
struct 是保存在栈, 其变量是存储整个结构的数据,做参数传递时,传递栈中整个结构体实际数据 ,
class 是保存在堆,其变量是实际数据的一个引用,做参数传递时,传递栈中数据引用
------解决思路----------------------
很不幸(或很幸运)你的猜测是对的。
Dotnet的delegate不仅包含了调用的‘方法’,还包含了调用的‘主体’,就是那个md.Target。
由于Deleget.Target的类型是object,当把一个struct放到Target里去的时候,需要装箱(涉及了struct复制)。