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
instance fields can be set via a parametrized constructor or individually after struct
construction.
Private members can only be initialized by the constructor.
struct
defines a sealed type that implicitly inherits from System.ValueType.
Structs cannot inherit from any other type, but they can implement interfaces.
Structs are copied on assignment, meaning all data is copied to the new instance and changes to one of them are not reflected by the other.
A struct cannot be null
, although it can used as a nullable type:
Vector v1 = null; //illegal
Vector? v2 = null; //OK
Nullable<Vector> v3 = null // OK
Structs can be instantiated with or without using the new
operator.
//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;
However, the new
operator must be used in order to use an initializer:
Vector v1 = new MyStruct { X=1, Y=2, Z=3 }; // OK
Vector v2 { X=1, Y=2, Z=3 }; // illegal
A struct can declare everything a class can declare, with a few exceptions:
struct
instance fields can be set via a parameterized constructor or individually after struct
construction. Private members can only be initialized by the constructor.