using System;

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
	}
	
	public class C
	{
		public static void Main ()
		{
			new Sender<string> ().DoSend<bool>(l => Console.WriteLine (l));
		}
	}
}