Constructors. Unlike a class, a struct is not permitted to declare a parameterless instance constructor
Unlike a class, a struct is not permitted to declare a parameterless instance constructor. Instead, every struct implicitly has a parameterless instance constructor which always returns the value that results from setting all value type fields to their default value and all reference type fields to null (§4.1.2). A struct can declare instance constructors having parameters. For example struct Point public Point(int x, int y) { Given the above declaration, the statements Point p1 = new Point(); Point p2 = new Point(0, 0); both create a Point with x and y initialized to zero. A struct instance constructor is not permitted to include a constructor initializer of the form base(...). If the struct instance constructor doesn’t specify a constructor initializer, the this variable corresponds to an out parameter of the struct type, and similar to an out parameter, this must be definitely assigned (§5.3) at every location where the constructor returns. If the struct instance constructor specifies a constructor initializer, the this variable corresponds to a ref parameter of the struct type, and similar to a ref parameter, this is considered definitely assigned on entry to the constructor body. Consider the instance constructor implementation below: struct Point public int X { public int Y { public Point(int x, int y) { No instance member function (including the set accessors for the properties X and Y) can be called until all fields of the struct being constructed have been definitely assigned. Note, however, that if Point were a class instead of a struct, the instance constructor implementation would be permitted.
|