using System;

namespace SimpleIndexer
{
	// Uproszczona kontrolka typu ListBox 
	public class ListBoxTest
	{
		private string[] strings;
		private int ctr = 0;

		// Inicjowanie kontrolki przy użyciu łańcuchów znaków 
		public ListBoxTest(params string[] initialStrings)
		{
			// Przydzielanie pamięci dla łańcuchów znaków 
			strings = new String[256];

			// Kopiowanie łańcuchów znaków przekazanych do konstruktora 
			foreach (string s in initialStrings)
			{
				strings[ctr++] = s;
			}
		}

		// Dodawanie pojedynczego łańcucha znaków na koniec listy
		public void Add(string theString)
		{
			if (ctr >= strings.Length)
			{
				// Obsługa niepoprawnych indeksów
			}
			else
				strings[ctr++] = theString;
		}

		// Umożliwienie dostępu jak do tablicy 

		public string this[int index]
		{
			get
			{
				if (index < 0 || index >= strings.Length)
				{
					// Obsługa niepoprawnych indeksów
				}
				return strings[index];
			}
			set
			{
				// Dodawanie elementów jest możliwe jedynie przy użyciu metody add
				if (index >= ctr)
				{
					// Obsługa błędów
				}
				else
					strings[index] = value;
			}
		}

		// Informuje o liczbie przechowywanych łańcuchów znaków 
		public int GetNumEntries()
		{
			return ctr;
		}
	}

	public class Tester
	{
		static void Main()
		{
			// Tworzenie i inicjowanie nowej listy
			ListBoxTest lbt =
			new ListBoxTest("Witaj", "Świecie");

			// Dodawanie kilku łańcuchów znaków 
			lbt.Add("Proust");
			lbt.Add("Faulkner");
			lbt.Add("Mann");
			lbt.Add("Hugo");

			// Testowanie dostępu
			string subst = "Wszechświecie";
			lbt[1] = subst;

			// Dostęp do wszystkich łańcuchów znaków 
			for (int i = 0; i < lbt.GetNumEntries(); i++)
			{
				Console.WriteLine("lbt[{0}]: {1}", i, lbt[i]);
			}
		}
	}
}
