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 constructor, type T3 must inherit from the Control class, and type T2 must inherit from type T3.

public class StrangeGeneric<T1, T2, T3>
    where T1 : IComparable<T1>, new()
    where T3 : Control
    where T2 : T3
{

}

Generic Methods

You can also give a class (generic or otherwise) a generic method. Just as a generic class is not tied to a particular data type, the parameters of a generic method are not tied to a specific data type.

To make a generic method, include type parameters similar to those you would use for a generic class. The following code defines a generic Switch method inside the static Switcher class.

public static class Switcher
{
    // Switch two values.
    public static void Switch<T>(ref T value1, ref T value2)
    {
        T temp = value1;
        value1 = value2;
        value2 = temp;
    }
}
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.143.5.201