using System;

public class Window
{
	// Konstruktor przyjmuje dwie liczby całkowite,
	// aby określić położenie w konsoli
	public Window(int top, int left)
	{
		this.top = top;
		this.left = left;
	}

	// Symulacja rysowania okna
	public void DrawWindow()
	{
		Console.WriteLine("Rysowanie okna w punkcie {0}, {1}",
		   top, left);
	}

	// Te składowe są prywatne, dlatego są niedostępne
	// w metodach klasy pochodnej. Jest to opisane w
	// dalszej części tego rozdziału
	private int top;
	private int left;
}

// Klasa ListBox dziedziczy po klasie Window
public class ListBox : Window
{
	// Konstruktor ma nowy parametr 
	public ListBox(int top, int left, string theContents)
		:
	base(top, left) // Wywołanie konstruktora klasy bazowej
	{
		mListBoxContents = theContents;
	}

	// Nowa wersja (słowo kluczowe) jest potrzebna, ponieważ
	// metoda klasy pochodnej działa w inny sposób
	public new void DrawWindow()
	{
		base.DrawWindow(); // Wywołanie metody klasy bazowej
		Console.WriteLine("Zapis łańcucha znaków do kontrolki klasy ListBox: {0}",
		   mListBoxContents);
	}
	private string mListBoxContents; // Nowa zmienna składowa
}

public class Tester
{
	public static void Main()
	{
		// Tworzy egzemplarz klasy bazowej
		Window w = new Window(5, 10);
		w.DrawWindow();

		// Tworzy egzemplarz klasy pochodnej
		ListBox lb = new ListBox(20, 30, "Witaj świecie");
		lb.DrawWindow();
	}
}


