//
// 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;
using System.Reflection;

namespace LateBinding
{
	/// <summary>
	/// Podsumowanie dla LateBindingMain.
	/// </summary>
	class LateBindingMain
	{
		/// <summary>
		/// Główny punkt wejścia dla aplikacji.
		/// </summary>
		[STAThread]
		static void Main(string[] args)
		{
			String progId = "COMTypes.TypeTest";
			Type t = Type.GetTypeFromProgID(progId);
			Object o = Activator.CreateInstance(t);

			t.InvokeMember("Name",
 				BindingFlags.SetProperty | 
				BindingFlags.Public | 
				BindingFlags.Instance, 
				null, o, new Object[] {"Testing"}, null, null, null);
			Object result = t.InvokeMember("Name",
				BindingFlags.GetProperty | 
				BindingFlags.Public | 
				BindingFlags.Instance, 
				null, o, null, null, null, null);
			Console.WriteLine("Nazwa: {0}", result);

			t.InvokeMember("Date",
				BindingFlags.SetProperty | 
				BindingFlags.Public | 
				BindingFlags.Instance, 
				null, o, new Object[] {DateTime.Now}, null, null, null);
			result = t.InvokeMember("Date",
				BindingFlags.GetProperty | 
				BindingFlags.Public | 
				BindingFlags.Instance, 
				null, o, null, null, null, null);
			Console.WriteLine("Data: {0}", result);
		}
	}
}
