C# Language Declarando una estructura


Ejemplo

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 campos de instancia de struct se pueden establecer a través de un constructor parametrizado o individualmente después de la construcción de struct .

  • Los miembros privados solo pueden ser inicializados por el constructor.

  • struct define un tipo sellado que hereda implícitamente de System.ValueType.

  • Las estructuras no pueden heredar de ningún otro tipo, pero pueden implementar interfaces.

  • Las estructuras se copian en la asignación, lo que significa que todos los datos se copian en la nueva instancia y los cambios en una de ellas no se reflejan en la otra.

  • Una estructura no puede ser null , aunque se puede usar como un tipo anulable:

    Vector v1 = null; //illegal
    Vector? v2 = null; //OK
    Nullable<Vector> v3 = null // OK
    
  • Las estructuras se pueden crear instancias con o sin el uso del new operador.

    //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;
    

    Sin embargo, el new operador debe usarse para utilizar un inicializador:

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

Una estructura puede declarar todo lo que una clase puede declarar, con algunas excepciones:

  • Una estructura no puede declarar un constructor sin parámetros. struct campos de instancia de struct se pueden establecer a través de un constructor parametrizado o individualmente después de la construcción de struct . Los miembros privados solo pueden ser inicializados por el constructor.
  • Una estructura no puede declarar miembros como protegidos, ya que está implícitamente sellada.
  • Los campos Struct solo se pueden inicializar si son const o static.