Export (0) Print
Expand All
22 out of 44 rated this helpful - Rate this topic

Structs (C# Programming Guide)

Structs are defined using the struct keyword, for example:

public struct PostalAddress
    // Fields, properties, methods and events go here...

Structs share almost all the same syntax as classes, although structs are more limited than classes:

  • Within a struct declaration, fields cannot be initialized unless they are declared as const or static.

  • A struct may not declare a default constructor —a constructor with no parameters — or a destructor.

Copies of structs are created and destroyed automatically by the compiler, so a default constructor and destructor are unnecessary. In effect, the compiler implements the default constructor by assigning all the fields of their default values (see Default Values Table). Structs cannot inherit from classes or other structs.

Structs are value types — when an object is created from a struct and assigned to a variable, the variable contains the entire value of the struct. When a variable containing a struct is copied, all of the data is copied, and any modification to the new copy does not change the data for the old copy. Because structs do not use references, they do not have identity — there is no way to distinguish between two instances of a value type with the same data. All value types in C# inherently derive from ValueType, which inherits from Object.

Value types can be converted to reference types by the compiler in a process known as boxing. For more information, see Boxing and Unboxing.

Structs Overview

Structs have the following properties:

  • Structs are value types while classes are reference types.

  • Unlike classes, structs can be instantiated without using a new operator.

  • Structs can declare constructors, but they must take parameters.

  • A struct cannot inherit from another struct or class, and it cannot be the base of a class. All structs inherit directly from System.ValueType, which inherits from System.Object.

  • A struct can implement interfaces.

Related Sections

See Also

Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback

Community Additions

© 2014 Microsoft. All rights reserved.