//
// 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 Testing
{
	interface ICommunicate
	{
		void Speak(string s);
		void Listen(string s);
		void Read(string s);
		void Write(string s);
	}
	interface ITravel
	{
		void Walk();
		void Car();
		void Train();
		void Plane();
	}
	class Activities: ICommunicate, ITravel
	{
		// ICommunicate
		public void Speak(string s)
		{
			Console.WriteLine("Powiedziałem \"{0}\".", s);
		}
		public void Listen(string s)
		{
			Console.WriteLine("Słyszałem, że powiedziałeś \"{0}\".", s);
		}
		public void Read(string s)
		{
			Console.WriteLine("Przeczytałem \"{0}\".", s);
		}
		public void Write(string s)
		{
			Console.WriteLine("Napisałem \"{0}\".", s);
		}
		// ITravel
		public void Walk()
		{
			Console.WriteLine("Idę sobię.");
		}
		public void Car()
		{
			Console.WriteLine("Jadę samochodem.");
		}
		public void Train()
		{
			Console.WriteLine("Jadę pociągiem.");
		}
		public void Plane()
		{
			Console.WriteLine("Lecę samolotem.");
		}
	}
	class InterfaceMain
	{
		static void Main(string[] args)
		{
			Activities a = new Activities();
			try
			{
				IComparable ic = (IComparable)a;
			}
			catch(Exception e)
			{
				Console.WriteLine(e);
			}
			if(a is ICommunicate)
			{
				ICommunicate ac = (ICommunicate)a;
				ac.Speak("Powiedziałem, że");
				ac.Listen("Mówię do ciebie");
				ac.Read("Zażółć gęślą jaźń.");
				ac.Write("Co ja robiłem w czasie wakacji.");
			}
			if(a is ITravel)
			{
				ITravel at = (ITravel)a;
				at.Walk();
				at.Car();
				at.Train();
				at.Plane();
			}
			Console.WriteLine("--------------------------");
			ICommunicate c = a as ICommunicate;
			if(c != null)
			{
				c.Speak("Powiedziałem, że");
				c.Listen("Mówię do ciebie");
				c.Read("Zażółć gęślą jaźń.");
				c.Write("Co ja robiłem w czasie wakacji.");
			}
			ITravel t = a as ITravel;
			if(t != null)
			{
				t.Walk();
				t.Car();
				t.Train();
				t.Plane();
			}
		}
	}
}
