簡體   English   中英

為什么更新第一個變量值時第二個變量值會改變?

[英]Why does my second variable value change when updating the first?

我有一個帶有兩個Datalog類變量的Form

public partial class ModifyDataForm : Form
{
    public DataLog DLog;
    private DataLog copyCurrent;

    public ModifyDataForm(DataLog log, int selectIndex = 0)
    {
        InitializeComponent();
        DLog = (DataLog)log.Clone();
        copyCurrent = (DataLog)log.Clone();
    }
}

當我更新DLog的值時,copyCurrent的值也會更改,為什么?

我在其中更新變量的功能如下

    private void smooth_Click(object sender, EventArgs e)
    {
        int NValues; int POrder;
        if (getSmoothParameters(out NValues, out POrder))//parameters are valid
        {
            float[] yvalues = DataLog.convertStringArrayToFloats(DLog.Data[labelIndex]);
            float[] newyvalues = Filters.smooth.SavitzkyGolay(yvalues, NValues, POrder);



            //I am updating the values of DLog here,
            //but the values of copyCurrent also changes
            DLog.Data[labelIndex] = Array.ConvertAll(newyvalues, x => AuxillaryFunctions.DecimalPlaceNoRounding((double)x));



            ((ViewDigiFiles)this.Owner).updateSelectedLog(DLog);
            ((ViewDigiFiles)this.Owner).glControl1.Invalidate();
        }
        else//parameters are NOT valid
        {
            MessageBox.Show("Invalid smoothing parameters.");
            return;
        }
    }

copyCurrent的值不變。 copyCurrent 引用的對象中的數據可能會更改,但這是另一回事。

假設您給兩個人(愛麗絲和鮑勃)的紙上寫有您的家庭住址。 愛麗絲走了,把你的前門漆成紅色。 那改變了鮑勃的紙嗎? 否-但是,如果鮑伯訪問紙上的地址,他仍然會看到紅色的前門。

這是值類型和引用類型如何在C#中工作的基礎部分。 當變量是引用類型時,其值不是對象本身,而是引用,就像街道地址一樣,這是導航到對象的一種方式。 將一個變量的值復制到另一個變量中只會復制引用,就像將街道地址從一張紙復制到另一張紙一樣。

區分變量,引用和對象非常重要。 有關更多詳細信息,請參見我有關值類型和引用類型的文章 (或任何不錯的C#入門書籍)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM