7.1. Overview

To understand the role of generic constraints, you must first have a clear picture of why they're needed and how they are applied. With that as goal in mind, let's get started by building a sample that simply extends an existing generic type. For this scenario, let's assume you've decided to introduce your own DataObjectCollection that will descend from the List<T> collection and add a series of operations that provide specific functionality associated with some data objects from your domain. This new class is implemented as follows:

[VB code]
Public Class DataObjectCollection(Of T)
    Inherits List(Of T)

    Public Sub Print()
        Dim coll As List(Of T).Enumerator = GetEnumerator()
        While (coll.MoveNext())
            Console.Out.WriteLine(coll.Current.ToString)
        End While
    End Sub

    Public Function Lookup(ByVal lookupValue As String) As T
Dim retVal As T
        Dim coll As List(Of T).Enumerator = GetEnumerator()
        While (coll.MoveNext())
            If (coll.Current.ToString().Equals(lookupValue) = True) Then
                retVal = coll.Current
                Exit While
            End If
        End While
        Return retVal
    End Function
End Class
[C# code] public class DataObjectCollection<T> : List<T> { public void Print() { List<T>.Enumerator coll = GetEnumerator(); while (coll.MoveNext()) { Console.Out.WriteLine(coll.Current.ToString()); } } public T Lookup(string lookupValue) { T retVal = default(T); List<T>.Enumerator coll = GetEnumerator(); while (coll.MoveNext()) { if (coll.Current.ToString().Equals(lookupValue) == true) { retVal = coll.Current; break; } ...

Get Professional .NET 2.0 Generics 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.