簡體   English   中英

C#函數的返回類型

[英]C# return type of function

GetNode返回什么,對真實值的副本或引用?

public GraphNode GetNode(int idx)
{
    return Nodes[idx];
}

換句話說,此代碼將更改實際值還是將更改從GetNode返回的副本?

GetNode(someIndex).ExtraInfo = something;

謝謝

取決於GraphNode是類還是結構。 如果是課程,您將更改“真實”值。 結構是相反的。

這取決於您對GraphNode的定義。

如果它是一個 (通過引用),它將返回相同的實例;

或者如果它是一個結構 (值類型),那么您將獲得一個新實例。

換句話說,此代碼將更改實際值還是將更改從GetNode返回的副本?

GetNode(someIndex).ExtraInfo = something;

如果GetNode()返回一個struct / value類型,您實際上會在C#中收到編譯錯誤:

無法修改“ GetNode(someIndex)”的返回值,因為它不是變量

這完全是因為編譯器試圖保護您避免更改復制值而無濟於事。 您的示例僅在GetNode()返回引用類型時才有意義。

使示例針對值類型進行編譯的唯一方法是將返回值的檢索與屬性分配分開:

var node = GetNode(someIndex);
node.ExtraInfo = something;

在這種情況下,正如其他張貼者所提到的,它確實取決於GetNode()返回引用類型還是值類型。 對於引用類型,您正在更改GetNode()返回引用的原始類實例,對於值類型,您正在修改新的復制實例。

類在C#中的工作方式是可以將它們作為指針傳遞。

您可以像在示例中一樣在其中設置值,它將更改原始值。 但是,如果沒有包裝,則無法設置實際的類本身。

它將返回對GraphNode對象的引用(如果GraphNode是類),因此將更改原始對象。

暫無
暫無

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

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