Luokat voivat periä toisen luokan (kantaluokka), jolloin ne voivat laajentaa/muuttaa sen toiminnallisuutta. Alla esimerkki, jossa Lapsiluokka perii Kantaluokan

public class Kantaluokka
{
	// muodostin
	public Kantaluokka()
	{
		Console.WriteLine("Kantaluokan muodostin");
	}
	// toinen muodostin
	public Kantaluokka(string viesti)
	{
		Console.WriteLine("Kantaluokan muodostin: " + viesti);
	}
}
public class Lapsiluokka : Kantaluokka
{
	// muodostin
	public Lapsiluokka()
	{
		Console.WriteLine("Lapsiluokan muodostin");
	}
	// toinen muodostin
	// kutsuu kantaluokan muodostinta parametrilla
	public Lapsiluokka(string viesti) : base(viesti)
	{
		Console.WriteLine("Lapsiluokan muodostin: "+viesti);
	}
}
Lapsiluokka ll = new Lapsiluokka();
Lapsiluokka ll2 = new Lapsiluokka("Viesti muodostimelle");
base-avainsanalla päästään käsiksi kantaluokan jäseniin

Kantaluokan jäsenen piilottaminen

Kantaluokan jäsenen voi piilottaa new-avainsanalla
public class Kantaluokka
{
	public void Metodi()
	{
		Console.WriteLine("Metodi kantaluokassa");
	}
}
public class Lapsiluokka : Kantaluokka
{
	public new void Metodi()
	{
		Console.WriteLine("Metodi lapsiluokassa");
	}
}
Lapsiluokka ll = new Lapsiluokka();
ll.Metodi();

Virtuaaliset metodit ja ominaisuudet

Metodit ja ominaisuudet voidaan määritellä virtuaalisiksi, jolloin perivä luokka voi ylikirjoittaa kantaluokan toteutuksen käyttämällä avainsanaa override
public class Kantaluokka
{
	public virtual void Metodi()
	{
		Console.WriteLine("Metodi kantaluokassa");
	}
}
public class Lapsiluokka : Kantaluokka
{
	public override void Metodi()
	{
		base.Metodi();
		Console.WriteLine("Metodi lapsiluokassa");
	}
}
Lapsiluokka ll = new Lapsiluokka();
ll.Metodi();

Piilotetun ja virtuaalisen jäsenen ero

``` csharp public class Kantaluokka { public void NormaaliMetodi() { Console.WriteLine("Normaali metodi kantaluokassa"); } public virtual void VirtuaalinenMetodi() { Console.WriteLine("Virtuaalinen metodi kantaluokassa"); } } public class Lapsiluokka : Kantaluokka { public new void NormaaliMetodi() { Console.WriteLine("Normaali metodi lapsiluokassa 2"); } public override void VirtuaalinenMetodi() { Console.WriteLine("Ylikirjoitettu metodi lapsiluokassa 1"); } } ```
Lapsiluokka ll = new Lapsiluokka();
ll.NormaaliMetodi(); // kutsuu lapsiluokkaa
ll.VirtuaalinenMetodi(); // kutsuu lapsiluokkaa

Kantaluokka kl = ll;
kl.NormaaliMetodi(); // kutsuu kantaluokkaa!
kl.VirtuaalinenMetodi(); // kutsuu lapsiluokkaa