11.2 Reference types
A reference type is a class type, an interface type, an array type, or a
delegate type.
Chapter 11 Types
95
reference-type:
class-type
interface-type
array-type
delegate-type
class-type:
type-name
object
string
interface-type:
type-name
array-type:
non-array-type rank-specifiers
non-array-type:
type
rank-specifiers:
rank-specifier
rank-specifiers rank-specifier
rank-specifier:
[ dim-separatorsopt ]
dim-separators:
,
dim-separators ,
delegate-type:
type-name
A reference type value is a reference to an instance of the type, the
latter known as an object. The special
value null is compatible with all reference types and indicates the absence
of an instance.
11.2.1 Class types
A class type defines a data structure that contains data members (constants
and fields), function members
(methods, properties, events, indexers, operators, instance constructors,
destructors, and static constructors),
and nested types. Class types support inheritance, a mechanism whereby
derived classes can extend and
specialize base classes. Instances of class types are created using
object-creation-expressions (§14.5.10.1).
Class types are described in §17.
11.2.2 The object type
The object class type is the ultimate base class of all other types. Every
type in C# directly or indirectly
derives from the object class type.
The keyword object is simply an alias for the predefined class
System.Object.
11.2.3 The string type
The string type is a sealed class type that inherits directly from object.
Instances of the string class
represent Unicode character strings.
Values of the string type can be written as string literals (§9.4.4).
The keyword string is simply an alias for the predefined class
System.String.
C# LANGUAGE SPECIFICATION
96
11.2.4 Interface types
An interface defines a contract. A class or struct that implements an
interface must adhere to its contract. An
interface may inherit from multiple base interfaces, and a class or struct
may implement multiple interfaces.
Interface types are described in §20.
11.2.5 Array types
An array is a data structure that contains zero or more variables which are
accessed through computed
indices. The variables contained in an array, also called the elements of
the array, are all of the same type,
and this type is called the element type of the array.
Array types are described in §19.
11.2.6 Delegate types
A delegate is a data structure that refers to one or more methods, and for
instance methods, it also refers to
their corresponding object instances.
[Note: The closest equivalent of a delegate in C or C++ is a function
pointer, but whereas a function pointer
can only reference static functions, a delegate can reference both static
and instance methods. In the latter
case, the delegate stores not only a reference to the method.s entry point,
but also a reference to the object
instance on which to invoke the method. end note]
Delegate types are described in §22.
A reference type is a class type, an interface type, an array type, or a
delegate type.
Chapter 11 Types
95
reference-type:
class-type
interface-type
array-type
delegate-type
class-type:
type-name
object
string
interface-type:
type-name
array-type:
non-array-type rank-specifiers
non-array-type:
type
rank-specifiers:
rank-specifier
rank-specifiers rank-specifier
rank-specifier:
[ dim-separatorsopt ]
dim-separators:
,
dim-separators ,
delegate-type:
type-name
A reference type value is a reference to an instance of the type, the
latter known as an object. The special
value null is compatible with all reference types and indicates the absence
of an instance.
11.2.1 Class types
A class type defines a data structure that contains data members (constants
and fields), function members
(methods, properties, events, indexers, operators, instance constructors,
destructors, and static constructors),
and nested types. Class types support inheritance, a mechanism whereby
derived classes can extend and
specialize base classes. Instances of class types are created using
object-creation-expressions (§14.5.10.1).
Class types are described in §17.
11.2.2 The object type
The object class type is the ultimate base class of all other types. Every
type in C# directly or indirectly
derives from the object class type.
The keyword object is simply an alias for the predefined class
System.Object.
11.2.3 The string type
The string type is a sealed class type that inherits directly from object.
Instances of the string class
represent Unicode character strings.
Values of the string type can be written as string literals (§9.4.4).
The keyword string is simply an alias for the predefined class
System.String.
C# LANGUAGE SPECIFICATION
96
11.2.4 Interface types
An interface defines a contract. A class or struct that implements an
interface must adhere to its contract. An
interface may inherit from multiple base interfaces, and a class or struct
may implement multiple interfaces.
Interface types are described in §20.
11.2.5 Array types
An array is a data structure that contains zero or more variables which are
accessed through computed
indices. The variables contained in an array, also called the elements of
the array, are all of the same type,
and this type is called the element type of the array.
Array types are described in §19.
11.2.6 Delegate types
A delegate is a data structure that refers to one or more methods, and for
instance methods, it also refers to
their corresponding object instances.
[Note: The closest equivalent of a delegate in C or C++ is a function
pointer, but whereas a function pointer
can only reference static functions, a delegate can reference both static
and instance methods. In the latter
case, the delegate stores not only a reference to the method.s entry point,
but also a reference to the object
instance on which to invoke the method. end note]
Delegate types are described in §22.