C# generics allow the specification of type parameters for classes, interfaces, and methods. This allows types to be deferred until runtime, providing type safety. Generics eliminate the need to use base object types and casts. Well-known generic collections like List<T> are provided in the System.Collections.Generic namespace.