public static void Main()
Action<Foo> foo = val => Console.WriteLine("A: " + val.Baz);
Action<Bar> bar = val => Console.WriteLine("B: " + val.Baz);
public static void Act<T>(Action<T> action, T data) where T : Foo {
public override string Baz {get{return "Bar";}}
public virtual string Baz {get{return "Foo";}}