C#对象分配

时间:2014-09-01 06:33:50

标签: c# object

我正在用C#编写代码。请参阅以下代码。

    //-- Constructor
    public frmInvoice(EditInvoice editInvoice)
    {
        InitializeComponent();

        originalInfo = new EditInvoice();
        editedInfo = new EditInvoice();

        originalInfo = editInvoice;
        editedInfo = editInvoice;
        payment = new Payment();
    }

    //-- Process
    private void btnOk_Click(object sender, EventArgs e)
    {
        editedInfo.AppliedAmount = Convert.ToDouble(txtAppliedAmount.Text);
        editedInfo.PaymentCode = cboPaymentCode.SelectedValue.ToString();
        editedInfo.Remarks = txtRemarks.Text;

        if (originalInfo.AppliedAmount != editedInfo.AppliedAmount ||
            originalInfo.PaymentCode != editedInfo.PaymentCode ||
            originalInfo.Remarks != editedInfo.Remarks)
        {
            editedInfo.IsEdited = true;
        }
    }

现在的问题是,为什么原始对象**originalInfo**也改变了,据说不是。这很烦人!

附加:如果有差异,是否有更好/最短的方法与对象(模型)进行比较?

1 个答案:

答案 0 :(得分:1)

由于editInvoice可能是引用类型,因此您应该克隆它而不是直接分配它。

http://msdn.microsoft.com/en-us/library/system.object.memberwiseclone(v=vs.110).aspx

<强>更新 既然你声明editInvoice是一个模型,它是一个引用类型,任何类都是引用类型。例如,结构将是值类型。有关详细信息,请参阅此文章:http://msdn.microsoft.com/en-us/library/t63sy5hs.aspx