We saw how to define classes from which we can
create instances called objects, and that this can be
useful when attempting to model real-world entities. We can also define
value types, using the struct
keyword, and the main difference is that
when we assign variables or pass arguments, value types always copy the
whole value, whereas ordinary classes (which are reference types) only
copy a reference to the underlying object. We also saw a simpler kind of
type: enum
. This lets us define named
sets of constant values, and is useful when we need a value representing a
choice from a fixed set of options.
So, now we know how to abstract basic ideas of information storage (through fields and simple properties) and manipulation (through functions and calculated properties), using classes and objects. In the next chapter, we’re going to look at how we can extend these ideas further using a concept called polymorphism to model a hierarchy of related classes that can extend or refine some basic contract.