声明一个结构

public struct Vector 
{
    public int X;
    public int Y;
    public int Z;
}

public struct Point
{
    public decimal x, y;
    
    public Point(decimal pointX, decimal pointY)
    {
        x = pointX;
        y = pointY;
    }
}
  • struct 实例字段可以通过参数化构造函数设置,也可以在 struct 构造后单独设置。

  • 私有成员只能由构造函数初始化。

  • struct 定义了一个隐式继承自 System.ValueType 的密封类型。

  • 结构不能从任何其他类型继承,但它们可以实现接口。

  • 在分配时复制结构,这意味着所有数据都将复制到新实例,而其中一个数据的更改不会被另一个实例反映。

  • 结构不能是 null,尽管它可以用作可空类型:

    Vector v1 = null; //illegal
    Vector? v2 = null; //OK
    Nullable<Vector> v3 = null // OK
    
  • 可以使用或不使用 new 运算符来实例化结构。

    //Both of these are acceptable
    Vector v1 = new Vector();
    v1.X = 1;
    v1.Y = 2;
    v1.Z = 3;
    
    Vector v2;
    v2.X = 1;
    v2.Y = 2;
    v2.Z = 3;
    

    但是,必须使用 new 运算符才能使用初始值设定项:

    Vector v1 = new MyStruct { X=1, Y=2, Z=3 }; // OK
    Vector v2 { X=1, Y=2, Z=3 }; // illegal
    

结构可以声明类可以声明的所有内容,但有一些例外:

  • 结构不能声明无参数构造函数。struct 实例字段可以通过参数化构造函数设置,也可以在 struct 构造后单独设置。私有成员只能由构造函数初始化。
  • 结构不能将成员声明为受保护的,因为它是隐式密封的。
  • 结构字段只有在 const 或 static 时才能初始化。