Dot-Net

使用引用類型成員定義結構是否有意義?

  • April 11, 2011

使用引用類型成員定義結構(而不是將其定義為類)有什麼意義嗎?例如,要定義這個結構:

public struct SomeStruct
{
   string name;
   Int32  place;
}

我問是因為我知道結構是一種值類型,並且在其中定義一些引用類型沒有任何意義。

我對嗎?有人可以解釋一下嗎?

**十分之九,你應該首先創建一個類而不是一個結構。**例如,與 C++ 中的結構和類相比,C# 中的結構和類具有非常不同的語義。大多數使用結構的程序員都應該使用過類,坦率地說,像這樣的問題是無關緊要的。

以下是一些關於何時應該選擇結構而不是類的快速規則:

  1. 絕不。

…哦,你還在看書嗎?你很執著。好的。 2. 當您明確需要值類型語義而不是引用類型語義時。 3. 當您有一個非常小的類型時(經驗法則是記憶體佔用小於 16 字節)。 4. 當您的結構表示的對象將是短暫且不可變的(不會改變)時。 5. 有時,出於與使用結構的本機程式碼的互操作目的。

但是,如果您做出了明智的決定並且確實確信您確實需要一個結構而不是一個類,那麼您需要重新審視第 2 點並理解什麼是值類型語義。Jon Skeet 的文章在這裡應該對澄清區別大有幫助。

完成此操作後,您應該了解為什麼在值類型(結構)內定義引用類型不是問題。引用類型就像指針。結構內部的欄位不儲存實際類型;相反,它儲存指向該類型的指針(或引用)。使用包含引用類型的欄位聲明結構沒有任何矛盾或錯誤。它既不會“減慢對象”也不會“呼叫 GC”,這是您在評論中表達的兩個擔憂。

引用自:https://stackoverflow.com/questions/5620843