Uitleg abstract method

  • Onderwerp starter Onderwerp starter baws
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

baws

Terugkerende gebruiker
Lid geworden
9 apr 2010
Berichten
1.258
Hallo,
kan iemand mij een uitleg geven van een abtract method.
en hoe ik die kan implementeren in een andere class.
Wat ik al weet.
een abstract method heeft geen {}.
ik heb als voorbeeld gekregen een method in bijvoorbeeld class 1
public abstract string DisplayStorageCapacity();

En class2 moet een implementatie van DisplayStorageCapacity()
bevatten die een string terug geeft.

wat is dan het verband tussen de method in class 1 en in class 2?
En vooral wat is het nut ervan en wanneer gebruik je het!
 
Laatst bewerkt:
abstract class:
Code:
public abstract class Employee
{
	public string Name { get; set; }

	protected Employee(string name)
	{
		Name = name;
	}

	public abstract void PrintDetails();
}



implementation:
Code:
public class TeamMember : Employee
{
	public TeamMember(string name)
		: base(name)
	{
	}

	public override void PrintDetails()
	{
		Console.WriteLine("Member: {0}", Name);
	}
}

implementation:
Code:
public class TeamLeader : Employee
{
	public int TeamSize { get; set; }

	public TeamLeader(string name, int teamSize)
		: base(name)
	{
		TeamSize = teamSize;
	}

	public override void PrintDetails()
	{
		Console.WriteLine("Leader: {0} (leader of {1} members)", Name, TeamSize);
	}
}

gebruik:
Code:
static void Main(string[] args)
{
	List<Employee> employees = new List<Employee>();

	employees.Add(new TeamMember("John"));
	employees.Add(new TeamMember("Bob"));
	employees.Add(new TeamMember("Samantha"));
	employees.Add(new TeamMember("Eric"));
	employees.Add(new TeamMember("David"));

	employees.Add(new TeamLeader("Janet", employees.Count));

	foreach (Employee employee in employees)
	{
		employee.PrintDetails();
	}

	Console.Read();
}


Je ziet een employee class met de abstract method PrintDetails. Nu zie je 2 verschillende implementaties ervan in de member en leader class.

Het voordeel dan je ziet in de console application is dat je een lijst van employees hebt. Je kunt zowel members als leaders aan deze lijst toevoegen en dus de PrintDetails aanroepen op elke employee. De eigen implementatie van deze method zal worden uitgevoerd. In dit voorbeeld zal de output als volgd zijn:

Member: John
Member: Bob
Member: Samantha
Member: Eric
Member: David
Leader: Janet (leader of 5 members)


Ook kun je de PrintDetails als virtual implementeren in de Employee class:

virtual PrintDetails:
Code:
public abstract class Employee
{
	public string Name { get; set; }

	protected Employee(string name)
	{
		Name = name;
	}

	public virtual void PrintDetails()
	{
		Console.WriteLine("Employee: {0}", Name);
	}
}

Het is dan niet noodzakelijk om de PrintDetails te implementeren op de andere classes, ook kun je dan in een override de base gebruiken:

Code:
public override void PrintDetails()
{
	base.PrintDetails();
	Console.WriteLine("This employee is a team leader");
}
 
Ik heb nog geen ervaring met het gebruik van base. ik zal daar eerst eens naar kijken , lijkt een noodzaak voor het gebruik van abstract ? . ;)
 
Je gebruikt het bijvoorbeeld al bij de Name property, het is hetzelfde als base.Name gebruiken, maar het hoeft er niet voor te staan.

en in de constructor is dit:
Code:
public TeamLeader(string name, int teamSize)
	: base(name)
{
	TeamSize = teamSize;
}

is hetzelfde als:

Code:
public TeamLeader(string name, int teamSize)
{
	Name = name;
	TeamSize = teamSize;
}

of

Code:
public TeamLeader(string name, int teamSize)
{
	base.Name = name;
	this.TeamSize = teamSize;
}

base is simpelweg de base class waarop de huidige class is gebaseerd.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan