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

namespace CLRUnleashed
{

	/// <summary>
	/// Podsumowanie dla Class1.
	/// </summary>
	class ValuesAndReferences
	{
		private static void StaticStringModifier(string s)
		{
			s = "that";
		}

		/// <summary>
		/// Główny punkt wejścia dla aplikacji.
		/// </summary>
		[STAThread]
		static void Main(string[] args)
		{
			float a = 1.0F;
			float b = 1.0F;
			Console.WriteLine("a == b -> {0} ({1})", a == b, a.GetType());

			object ao;
			object bo;
			ao = a;
			bo = b;
			Console.WriteLine("obiekt a == obiekt b -> {0} {1} ({2})", ao.Equals(bo), ao == bo, ao.GetType().BaseType);

			string astr = "this";
			string bstr = "this";
			Console.WriteLine("ciąg a == ciąg b -> {0} ({1})", astr == bstr, astr.GetType().BaseType);

			Console.WriteLine("Przed: {0}", astr);
			StaticStringModifier(astr);
			Console.WriteLine("Po: {0}", astr);
		}
	}
}
