using System;
using System.Linq.Expressions;

namespace TestGenericsSubtypeMatching
{
	public class Sender<T> : IDisposable
	{

		public void DoSend<TMessage> (Action<T> action)
		{
			using (Sender<T> sub = new Sender<T> ())
			{
				Send (t =>
				{
					action(t);
					sub.ActionOnObject (t);
				});
			}
		}
		
		private static void Send (Action<T> action)
		{
		}
		
		void ActionOnObject (object o)
		{
			o.ToString ();
		}
	
		#region IDisposable implementation
		public void Dispose ()
		{
			Console.WriteLine ("Dispose!");
		}
		
		#endregion
	}
	
	class C
	{
		public static int Main ()
		{
			new Sender<int> ().DoSend<bool> (l => Console.WriteLine (l));
			return 0;
		}
	}
}