簡體   English   中英

通過引用C#調用“返回值”是否必要?

[英]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因為它始終與輸入相同。

這樣做有幾個原因:

  • 它確實允許函數分配新數組並在必要時返回該數組
  • 這是一種更加“實用”的API設計方法
  • 如果可能是API的一部分,該API使用采用數組並始終返回一個數組的約定,並且作者選擇遵循此約定以保持一致性。

問題是,盡管它是通過引用調用的,但只有該引用的副本傳遞給了您的方法,而不是原始引用。

只要您正在修改數組的內容,兩個引用仍然指向同一對象。 但是,如果在方法內分配新數組,則此更改不會影響方法外的對象。

因此,通常,如果要確保原始對象能夠反映更改或使用該方法的返回值,最好在方法中使用ref關鍵字。

但是在這種特殊情況下,您不需要返回值或關鍵字ref 但是同樣,最好根據您的操作使用返回值或ref

暫無
暫無

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

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