So far, the only user-defined type you’ve seen is the class. A second type of user-defined type is a structure. Structures are designed to be lightweight alternatives to classes. In this case, the term lightweight means that structures use fewer resources (i.e., less memory) than classes, but they offer less functionality.
Structures are similar to classes in that they can contain constructors, properties, methods, fields, operators, nested types, and indexers. There are, however, significant differences between classes and structures.
For example, structures don’t support inheritance or destructors. More important, while a class is a reference type, a structure is a value type.
The current consensus is that you ought to use structures only for types that are small, simple, and similar in their behavior and characteristics to built-in types. For example, if you were creating a class to represent a point on the screen (x,y coordinates), you might consider using a structure rather than a class.
Structures are somewhat more efficient in their use of memory in arrays; however, they can be less efficient when used in collections (arrays and collections are discussed in Chapter 9). Collections expect references, and because structures are value types, they must be boxed. There is overhead in boxing and unboxing, and classes might be more efficient in large collections. Boxing and unboxing are discussed in Chapter 6. In this chapter, you will learn how to define ...