C#声明一个结构

示例

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 // 好
  • 可以使用或不使用new运算符来实例化结构。

    //这两个都是可以接受的
    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 }; // 好
    Vector v2 { X=1, Y=2, Z=3 }; // 非法

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

  • 结构不能声明无参数的构造函数。struct实例字段可以通过参数化的构造函数设置,也可以在struct构造后单独设置。私有成员只能由构造函数初始化。

  • 由于结构是隐式密封的,因此无法将成员声明为受保护的结构。

  • 如果结构字段是const或static,则只能对其进行初始化。