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 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access