Use delegate when you need custom signatures or want to define specific, reusable types.
Use Action for methods that don’t need to return any value.
Use Func when you require a return value from your callback.
VS2012 compatible
var getDrink = new Func<DateTime, string>((date) =>
{
if...