0

所以我有一个活动...

 public class SetLineItemEvent : CompositePresentationEvent<SetLineItemEventPayload> { }

不是 SetLineItemEventPayLoad 包含 LineItem 对象吗?当我触发该事件并创建 SetLineitemEventPayLoad 的新实例并设置行项目对象时,它是否会复制该对象?还是我留下了对原始对象的引用?看起来它使用“深度克隆”(意味着我有一个全新的副本),但我希望有人能确认他们是否能够这样做。

请参阅此链接以更好地了解深度克隆的含义。 http://www.csharp411.com/c-object-clone-wars/

谢谢

4

2 回答 2

0

一个对象是被复制还是仅仅被引用取决于该对象是基于类还是结构。类对象总是被引用,而结构对象总是被复制,只要它们被分配或作为参数传递给方法。

struct A {}

A a1 = new A();
A a2 = a1; // copied
a1 == a2; // false

class B {}

B b1 = new B();
B b2 = bl; // both reference same object
b1 == b2; // true

因此,行为取决于您的“订单项”是类还是结构。

于 2011-02-07T22:18:12.443 回答
0

正如 Paul Ruane 所说,只要“SetLineItemEventPayload”是一个类,它将通过引用传递。没有克隆。

这是一个完整的小示例程序,它证明了......

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    class Program
    {
        static normalclass c;
        static normalstruct s;
        static void Main(string[] args)
        {
            c = new normalclass() { classArg = 1 };
            s = new normalstruct() { structArg = 1 };
            EventVarPasser.BasicEvent += new EventHandler<FancyEventArgs>(EventVarPasser_BasicEvent);
            EventVarPasser.RaiseEvent(c,s);


        }

        static void EventVarPasser_BasicEvent(object sender, FancyEventArgs e)
        {
            Console.WriteLine("Before Messing with Eventargs");
            Console.WriteLine("Class:" + c.classArg.ToString() + "  Struct: " + s.structArg.ToString());
            e.normclass.classArg += 1;
            e.normstruct.structArg += 1;
            Console.WriteLine("After Messing with Eventargs");
            Console.WriteLine("Class :" + c.classArg.ToString() + "  Struct: " + s.structArg.ToString());

        }

    }

    static class EventVarPasser
    {
        public static event EventHandler<FancyEventArgs> BasicEvent;

        public static void RaiseEvent(normalclass nc, normalstruct ns)
        {
            FancyEventArgs e = new FancyEventArgs() { normclass = nc, normstruct = ns };        
             BasicEvent(null, e);
        }

    }

    class normalclass
    {
        public int classArg;
    }

    struct normalstruct
    {
        public int structArg;
    }

    class FancyEventArgs : EventArgs
    {
        public normalstruct normstruct;
        public normalclass normclass;
    }

}

对此的输出是:

Before Messing with Eventargs
Class:1  Struct: 1
After Messing with Eventargs
Class :2  Struct: 1
于 2011-02-07T23:01:50.320 回答