Dienstag, 23. November 2010

String - Repräsentation einer Klasse durch Überladen von ToString()

Alle Klassen und Strukturen in C# erben implizit von der Überklasse Object.
Diese stellt einige grundlegende Methoden wie Equals() (prüft auf Gleichheit) und ToString() (stellt die Klasse als Zeichenkette dar) zur Verfügung.
Alle Klassen und Strukturen implementieren somit standardmäßig diese Methoden.
Jedem wird die Schreibweise Console.WriteLine(x.ToString()); bekannt sein, wobei x beispielsweise eine Integer - Variable ist. Auch diese Klasse besitzt die Methode ToString(), sie gibt den Wert der Ganzzahl als String aus.
Vom Programmierer angelegte Klassen erben auch von Object, haben also somit auch die Methode ToString() vordefiniert, hier liefert diese aber wahrscheinlich nicht das gewünschte Ergebnis.
Der Compiler druckt einfach den Typnamen der Klasse als Zeichenkette aus, woher sollte er auch wissen, wie der Programmierer eine Instanz der Klasse als Zeichenkette darstellen möchte.
Deswegen bietet es sich an, bei eigenen Klassen die Methode ToString() zu überschreiben. Beim Überschreiben (engl. overriding) von Methoden wird in der Kindsklasse eine Methode mit der gleichen Signatur (d.h. Name und Parameterliste gleich) wie eine Methode aus der Vaterklasse angelegt.
Wird nun die Methode der Kindsklasse aufgerufen, wird der Aufruf nicht mehr auf die Methode der Basisklasse weitergeleitet, sondern direkt in der Kindsklasse verarbeitet.
Das folgende Konsolenprogramm implementiert eine kleine Klasse Employee, in welcher die Methode ToString() überladen wird.
In der modifizierten Version werden Name und Gehalt des Mitarbeiters ausgegeben:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        Employee TestEmployee = new Employee("Hans Meier", 1000);
        Console.WriteLine(TestEmployee.ToString());
    }
}

class Employee
{
    public string Name;
    public int Salary;

    public Employee(string name, int salary)
    {
        Name = name;
        Salary = salary;
    }

    public override string ToString()
    {
        return "Name: " + Name + ", Gehalt: " + Salary + ".";
    }
}

Keine Kommentare:

Kommentar veröffentlichen