CSharp - Generic Types Subclassing


A generic class can be subclassed.

The subclass can leave the base class's type parameters open

The following code creates two classes. SpecialSet<T> leaves the type parameter as is.

class Set<T>{
class SpecialSet<T> : Set<T> {

Or the subclass can close the generic type parameters with a concrete type:

class IntSet : Set<int>  {

A subtype can also introduce fresh type arguments:

class Collection<T>                     {
class KeyedCollection<T,TKey> : Collection<T> {

The following code renamed the generic type.

class Collection<T> {...}
class KeyedCollection<TElement,TKey> : Collection<TElement> {...}