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

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

u7x9cc0

Navigointi

Social Media