当前位置: 代码迷 >> C# >> 嘱托使用struct实例的方法,一个疑问
  详细解决方案

嘱托使用struct实例的方法,一个疑问

热度:190   发布时间:2016-05-05 02:56:30.0
委托使用struct实例的方法,一个疑问。
    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 是保存在堆,其变量是实际数据的一个引用,做参数传递时,传递栈中数据引用


------解决思路----------------------
引用:
...委托对象就复制struct完整的对象吗?


很不幸(或很幸运)你的猜测是对的。

Dotnet的delegate不仅包含了调用的‘方法’,还包含了调用的‘主体’,就是那个md.Target
由于Deleget.Target的类型是object,当把一个struct放到Target里去的时候,需要装箱(涉及了struct复制)。
  相关解决方案