Suprascriere — RexDac Academy

RexDac AcademyNote tehnice · Ajută să ai câteva noțiuni de bază
0%Note publicate citite · pe acest dispozitiv

Nivelul 5 — Moștenire

Suprascriere

Note originale de SunDiaL · Vezi sursa în engleză

Suprascrierea se aplică numai metodelor și proprietăților. Pentru suprascriere se folosesc patru cuvinte-cheie. Primele trei reprezintă modul obișnuit de a suprascrie comportamentul. Membrii suprascriși trebuie să aibă același tip returnat, aceeași semnătură și aceiași parametri.

abstract

Nu are implementare; impune suprascrierea.

Dacă o clasă are cel puțin un membru abstract, trebuie marcată și ea ca abstractă, ceea ce împiedică instanțierea.

O clasă abstractă care nu are nicio metodă implementată este numită uneori clasă „pur” abstractă.

virtual

Are implementare; suprascrierea este opțională.

override

Marchează suprascrierea.

Pe lângă this, cuvântul-cheie base poate fi folosit pentru a accesa membrii clasei de bază.

new

Ascunde membrul părintelui în spatele altuia.

Deși asemănător, acest cuvânt-cheie nu realizează o suprascriere propriu-zisă. Ascunde membrul părintelui în spatele altuia cu același nume. Tipul returnat sau parametrii pot însă să difere.

Exemplu

public class Shape
{
	public abstract int Area()
}

public class Square : Shape
{
	public int Length { get; set; }
	
	public Square(int length)
	{
		this.Length = length
	}
		
	public override int Area()
	{
		return Length * Length;
	}
}

public class Cube : Square
{
	public Cube(int length) : base(length)
	{
		
	}
	
	public override int Area()
	{
		return base.Area() * 6;
	}
}

public class Circle : Shape
{
	public Circle(int radius)
	{
		this.Radius = radius;
	}
	public int Radius { get; set; }
	
	public override int Area()
	{
		return 3.14*Radius*Radius;
	}
}

public void Main()
{
	List<Shape> shapes = new List<Shape>();
	shapes.Add(new Square(3));
	shapes.Add(new Circle(5));
	foreach(Shape shape in shapes)
	{
		Console.WriteLine(shape.Area());
	}
}