[英]C# call by reference “return value” is dispensable?
即時通訊面臨一些代碼,我想知道這種方法是否需要返回值。 該方法更改了二維雙精度數組的某些值。
public double[,] startsimplex_werte(double[,]f)
{
double standardabstand_s = 1.0;
double[] vektor_e1 = newdouble[2]{1.0,0.0};
double[] vektor_e2 = newdouble[2]{0.0,1.0};
f[1,1]=f[0,1]+vektor_e1[0]*standardabstand_s;
f[1,2]=f[0,2];
f[2,1]=f[0,1];
f[2,2]=f[0,2]+vektor_e2[1]*standardabstand_s;
return f;
}
二維數組稱為:
double[,]f = new double[3,3];
所以然后在數組上使用該方法:
f = berechne.startsimplex_werte(f);
該方法在實際操作中的作用並不重要。 我的問題是:
是否有必要通過在方法中寫入“ return f”來返回數組的值。 由於數組是引用類型,因此存在按引用的調用。 因此該方法已經更改了數組的實際數據成員。 我會寫相同的方法,沒有返回值(void方法),只調用該方法而不將其分配給數組。 imo通過參數傳遞數組只是重要的。 兩種變體都一樣,還是我錯了?
我希望有人能告訴我我的建議是否正確。
沒錯,您不需要返回數組。
您正在修改其內容 。 如果要創建一個全新的實例,則必須返回它或使用ref
/ out
關鍵字傳遞數組。
沒錯,在這種情況下,無需返回f
因為它始終與輸入相同。
這樣做有幾個原因:
問題是,盡管它是通過引用調用的,但只有該引用的副本傳遞給了您的方法,而不是原始引用。
只要您正在修改數組的內容,兩個引用仍然指向同一對象。 但是,如果在方法內分配新數組,則此更改不會影響方法外的對象。
因此,通常,如果要確保原始對象能夠反映更改或使用該方法的返回值,最好在方法中使用ref
關鍵字。
但是在這種特殊情況下,您不需要返回值或關鍵字ref
。 但是同樣,最好根據您的操作使用返回值或ref
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.