Appendix M Generic Declarations
This appendix summarizes generic classes and methods. The final section in this appendix describes items that you cannot make generic.
Generic Classes
To define a generic class, make a class declaration as usual. After the class name, add one or more type names for data types surrounded by brackets. The following code defines a generic BinaryNode
class with the generic type highlighted in bold.
public class BinaryNode<T>
{
public T Value;
public BinaryNode<T> LeftChild, RightChild;
}
The class’s declaration includes one type parameter T
. The class’s code declares a Value
field of type T
. It also uses the type to declare the LeftChild
and RightChild
fields of type BinaryNode<T>
.
You can add constraints on the generic types, as in the following code.
public class SortedBinaryNode<T> where T : IComparable<T>
{
...
}
The code where T : IComparable<T>
indicates that the generic type T
must implement the interface IComparable<T>
.
A generic type’s where
clause can include one or more of the elements shown in the following table.
Element | Meaning |
struct | The type must be a value type. |
class | The type must be a reference type. |
new() | The type must have a parameterless constructor. |
«baseclass» | The type must inherit from baseclass. |
«interface» | The type must implement interface. |
«typeparameter» | The type must inherit from typeparameter. |
The following code defines the StrangeGeneric
class where type T1
must implement IComparable<T1>
and must provide a parameterless ...
Get C# 5.0 Programmer's Reference now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.