using System;
using System.Collections.Generic;

namespace ConsoleApplication1
{

	class Cat
	{
		private int age;

		public int Age
		{
			get { return age; }
			set { age = value; }
		}
		public Cat(int age)
		{
			this.age = age;
		}
	}

	class Tester
	{

		private void CatManager(Cat kitty)
      {
         Console.WriteLine ("Zarządzam kotem, który ma " + kitty.Age + " lat");
      }

		public void Run()
		{
			try
			{
				Console.WriteLine(
				   "Przydział zasobów, które wymagają zwolnienia");

				List<Cat> cats = new List<Cat>();
				cats.Add(new Cat(5));
				cats.Add(new Cat(7));

				CatManager(cats[1]); // Przekazanie drugiego kota
				CatManager(cats[2]); // Przekazanie trzeciego, nieistniejącego kota

				Console.WriteLine(
				   "Program może, ale nie musi wyświetlić tego wiersza");
			}

			catch (System.ArgumentOutOfRangeException)
			{
				Console.WriteLine(
				   "Często widziałam kota bez uśmiechu, \nale nigdy jeszcze " +
				   "nie spotkałam uśmiechu bez kota");
			}

			catch (Exception e)
			{
				Console.WriteLine("Przechwycono nieznany wyjątek" + e.Message);
			}

			finally
			{
				Console.WriteLine("Tu zwalnianie zasobów.");
			}
		}

		static void Main()
		{
			Console.WriteLine("Wejście do metody Main...");
			Tester t = new Tester();
			t.Run();
			Console.WriteLine("Wyjście z metody Main...");
		}
	}
}
