Classes, as specified in Partition I, sections 8.2.3 and 8.9.5, define types in an inheritance hierarchy. A class (except for the built-in class System.Object) shall declare exactly one parent class. A class shall declare zero or more interfaces that it implements (see Partition II, section 11). A concrete class may be instantiated to create an object, but an abstract class (see Partition II, section 9.1.4) shall not be instantiated. A class may define fields (static or instance), methods (static, instance, or virtual), events, properties, and nested types (classes, value types, or interfaces). Instances of a class (objects) are created only by explicitly using the newobj instruction (see Partition III [section 4.20]). When a variable or field that has a class as its type is created (for example, by calling a method that has a local variable of a class type), the value shall initially be null, a special value that is assignment compatible with all class types even though it is not an instance of any particular class. |