結構

struct 型別是一種值型別,通常用於封裝一小組相關變數,例如矩形的座標或庫存中專案的特徵。

是引用型別,結構是值型別。

using static System.Console;

namespace ConsoleApplication1
{
    struct Point
    {
        public int X;
        public int Y;

        public override string ToString()
        {
            return $"X = {X}, Y = {Y}";
        }

        public void Display(string name)
        {
            WriteLine(name + ": " + ToString());
        }
    }

    class Program
    {
        static void Main()
        {
            var point1 = new Point {X = 10, Y = 20};
            // it's not a reference but value type
            var point2 = point1;
            point2.X = 777;
            point2.Y = 888;
            point1.Display(nameof(point1)); // point1: X = 10, Y = 20
            point2.Display(nameof(point2)); // point2: X = 777, Y = 888

            ReadKey();
        }
    }
}

結構也可以包含建構函式,常量,欄位,方法,屬性,索引器,運算子,事件和巢狀型別,但如果需要多個此類成員,則應考慮將型別設定為類。

MS 對何時使用 struct 以及何時使用類的一些建議

考慮

如果型別的例項很小並且通常是短暫的或通常嵌入在其他物件中,則定義結構而不是類。

避免

定義結構,除非該型別具有以下所有特徵:

  • 它在邏輯上表示單個值,類似於原始型別(int,double 等)
  • 它的例項大小小於 16 個位元組。
  • 這是不可改變的。
  • 它不必經常裝箱。