//
// Copyright (c) 2002
// Ronald Kevin Burton
//
// Z poniższym kodem nie jest związana żadna gwarancja poprawności działania.
// Program został dołączony do książki ".NET CLR. Księga eksperta" w celu
// ilustracji koncepcji i zasad przedstawionych w tej książce. Program może być 
// używany na własne ryzyko.
//
// Przyznaje się prawo do użycia lub kopiowania tego oprogramowania do dowolnego celu
// bez konieczności ponoszenia żadnych opłat pod warunkiem, że powyższe uwagi zostaną 
// zachowane we wszystkich kopiach. Przyznaje się także prawo do modyfikacji kodu
// i dystrybucji zmodyfikowanego kodu pod warunkiem zachowania powyższych uwag
// oraz dołączenia informacji mówiącej o modyfikacji kodu.
//
//  
using System;
namespace Polymorphism
{
	class Character
	{
		String value;
		public Character()
		{
			value = "null";
		}
		public Character(String value)
		{
			this.value = value;
		}
		public virtual void Output()
		{
			Console.WriteLine("Jestem znakiem {0}", value);
		}
	}
	class Letter : Character
	{
		public Letter(String value) : base(value)
		{
		}
		public override void Output()
		{
			Console.Write("Jestem literą i ");
			base.Output();
		}
	}
	class Number : Character
	{
		public Number(String value) : base(value)
		{
		}
		public override void Output()
		{
			Console.Write("Jestem liczbą i ");
			base.Output();
		}
	}

	class CharacterOutput 
	{
		public static void Main(String[] args)
		{
			Character [] c = new Character [] { new Letter("A"),
												new Letter("B"),
												new Letter("C"),
												new Number("1"),
												new Number("2"),
												new Number("3") };
				// Wyliczenie tablicy argumentów wiersza poleceń.
				for(int i = 0; i < c.Length; ++i)
					c[i].Output();
		}
	}
}
