Обобщение и наследование - это две разные вещи. Наследование - это концепция ООП, а дженерики - это функция CLR, которая позволяет указывать параметры типа во время компиляции для типов, которые их предоставляют.
Наследование и дженерики действительно довольно хорошо работают вместе.
Наследование:
Наследование позволяет мне создать один тип:
class Pen { }
, а затем создайте еще один тип, расширяющий Pen
:
class FountainPen : Pen { }
Это полезно, потому что я могу повторно использовать все состояние и поведение базового класса и выставить любое новое поведение или состояние в FountainPen
. Наследование позволяет мне быстро создавать более конкретную версию существующего типа.
Дженерики:
Обобщение - это функция CLR, которая позволяет мне создавать такой тип:
class Foo<T>
{
public T Bar { get; set; }
}
Теперь, когда я использую Foo<T>
, я могу указать тип T
, предоставив аргумент универсального типа:
Foo<int> foo = new Foo<int>();
Теперь, поскольку я указал, что T
будет int
для объекта, который я только что создал, тип Foo.Bar
также будет int
, поскольку он был объявлен как тип T
.