public class Prostokat { public virtual int Szerokosc { get; set; } public virtual int Wysokosc { get; set; } } public class Kwadrat : Prostokat { public override int Wysokosc { get { return base.Wysokosc; } set { UstawBoki(value); } } public override int Szerokosc { get { return base.Szerokosc; } set { UstawBoki(value); } } // równe boki dla kwadratu private void UstawBoki(int value) { base.Wysokosc = value; base.Szerokosc = value; } }Dla kwadratu wywołujemy metodę UstawBoki(), która ustawia obydwa boki na tę samą długość.
public class Program { public static void Main() { //dla kwadratu wypisze 10x10 Prostokat kwadrat = new Kwadrat(); kwadrat.Szerokosc = 4; kwadrat.Wysokosc = 10; Console.WriteLine("{0} x {1}", kwadrat.Szerokosc, kwadrat.Wysokosc); //dla prostokata wypisze 4x10 Prostokat prostokat = new Prostokat(); prostokat.Szerokosc = 4; prostokat.Wysokosc = 10; Console.WriteLine("{0} x {1}", prostokat.Szerokosc, prostokat.Wysokosc); Console.ReadLine(); } }Program w zależności od typu stworzonego obiektu zwraca inne wyniki pomimo ustawienia w ten sam sposób długości boków. Jest to przykład zmiany zachowania klasy bazowej. Klasa Kwadrat dziedziczy po klasie Prostokat, a pomimo to w zależności od tego, do której klasy posiadamy referencje otrzymujemy inny wynik, chociaż typ obiektu jest cały czas taki sam a więc Prostokat.