Generics
Syntax
Generics allow you to write code once that can deal with any data type in a typesafe manner without the need for typecasting.
TSomeClass<T> = class
private
  FData : T;
  procedure SetData(inData : T);
public
  property Data : T read FData write SetData;
end;
var
  a : TSomeClass<integer>;
  b : TSomeClass<string>;
begin
  a := TSomeClass<integer>.Create;
  a.Data := 5;
  a.Free;

  b := TSomeClass<string>.Create;
  b.Data := 'The rain in spain';
  b.Free;
Further examples
Allen Bauer (Emb.) provided an implementation of nullable types using generics.
http://blogs.embarcadero.com/abauer/2008/09/18/38869
Barry Kelly describes a copy on write generic array that exhibits the copy on write behaviour shown by the Delphi string type.
http://blog.barrkel.com/2009/01/implementing-user-defined-copy-on-write.html
Collections 1.0 - A library of generics based collection classes from Alex Ciobanu (Emb.) to add to those that come with Delphi.
http://alex.ciobanu.org/?p=430
http://code.google.com/p/delphi-coll/
Craig Stuntz (TeamB) discusses using generics for nullable types, mock objects and MVC patterns.
http://blogs.teamb.com/craigstuntz/2008/08/07/37829
Lars Fosdal (ab)uses generics to create a case statement that works with strings.
http://delphi.fosdal.com/2010/12/generic-case-for-strings.html
http://delphi.fosdal.com/2010/12/generic-cache.html
Craig Stuntz (TeamB) implements Memoization - a generic solution to the problem of caching function results.
http://blogs.teamb.com/craigstuntz/2008/10/01/37839
Francois Piette writes a thread safe high speed queue class that uses generics and custom enumerators.
http://francois-piette.blogspot.com.au/2013/02/high-speed-generic-queue-class.html
Further reading
Consuming standard generics classes
Roland Beenhakker shows how to use the collection classes provided with Delphi.
Examples using the TList<T> class found in Generics.Collections.pas
http://beensoft.blogspot.com/2008/09/simple-generic-list-tlist.html
Examples using the TDictionary<TKey, TValue> class found in Generics.Collections.pas
http://beensoft.blogspot.com/2008/09/simple-generic-dictionary-tdictionary.html
Zarko uses an anonymous method comparer function to sort a TList<T>.
http://delphi.about.com/od/delphitips2009/qt/sort-generic.htm
Introductory Tutorials
Dr Bob provides an introduction to using generics.
http://www.drbob42.com/examines/examinA4.htm
Malcolm Groves experiments with using generic interfaces.
http://www.malcolmgroves.com/blog/?p=420
Nick Hodges discusses writing your own generic classes rather than just using the standard generics based container classes.
http://www.nickhodges.com/post/Authoring-Generics-A-Simple-First-Step.aspx
Comprehensive Tutorials
Constraints
The Embarcadero DocWiki help entry for constraints
http://docwiki.embarcadero.com/RADStudio/XE/en/Constraints_in_Generics
Alex Ciobanu (Emb.) discusses constructor constraints
http://alex.ciobanu.org/?p=51
An in depth look at constraints and how they are implemented by Felix Colibri.
http://www.felix-colibri.com/papers/oop_components/why_generics_constraints/why_generics_constraints.html
A workaround for the lack of operator constraints from Chris Rolliston.
http://delphihaven.wordpress.com/2011/03/18/generic-arithmetic/
A workaround for the lack of primitive type constraints by Craig Stuntz (TeamB).
http://blogs.teamb.com/craigstuntz/2008/08/29/37832
 
Disadvantages
Mason Wheeler discusses the increase in executable size that comes with using generics and proposes potential future solutions.
http://tech.turbu-rpg.com/299/wish-list-generics-collapsing
Type compatibility
Mason Wheeler discusses type compatibility of generic types (also known as the covariance)
http://tech.turbu-rpg.com/149/generics-and-the-covariance-problem
Advanced Techniques
Dr Bob combines anonymous methods with generics.
http://www.drbob42.com/examine/examinA6.htm
Barry Kelly (Emb.) has a example of using anonymous methods and generics to write an enumerator.
http://blog.barrkel.com/2008/08/tiburon-fun-with-generics-and-anonymous.html
Allen Bauer (Emb.) uses generics to implement an enumerator.
http://blogs.embarcadero.com/abauer/2007/11/21/38841
Stefan Glienke uses generics to implement an enumerator with the goal of simulating the extension methods of C#.
http://delphisorcery.blogspot.com.au/2013/04/why-no-extension-methods-in-delphi.html
Multi-threaded applications
Allen uses anonymous methods in conjunction with generics and the TMonitor record.
http://blogs.embarcadero.com/abauer/2008/09/25/38870
David Clegg describes how he uses generics and anonymous methods to create threads that will return a result of some kind and notify the calling thread of it's progress as it goes.
http://blogs.embarcadero.com/dclegg/2013/04/30/127