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.

ElementMeaning
structThe type must be a value type.
classThe 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.