[英]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.