C# - przeładowanie metody toString()
W tym artykule chcielibyśmy pokazać jak przeładować metodę ToString() w języku C#.
W obiektowych językach programowania, dla wszytkich obiektów można stworzyć własną tekstową repreznetację. W języku C# służy do tego metoda ToString(), która zwraca domyślnie tekst w formacie some.namespace.ClassName.
Wynik wykonania metody ToString() wykorzystywany jest bardzo często:
- przy debugowaniu, aby ułatwić śledzenie stanu obiektów,
(w Microsoft Visual Studio podczass debugowania dostajemy uproszczony podgląd obiektów w postaci tekstowej, wygenerowany za pomocąToString()) - podczas logowania informacji na temat działania aplikacji,
(takie logowanie może odbywać się jako: wypisywanie w konsoli lub zapisywanie w plikach informacji o tym, co dzieje się w aplikacji w danym momęcie, ułatwiając poszukiwanie błedów i problemów np. w przyszłosci) - podczas wyświetlania obiektów na niektórych komponentach,
(np. komponent ListBox w Windows Forms domyślnie używaToString(), aby wyświetlić elementy w postaci tekstowej na liście) - itp.
Szybkie rozwiązanie:
class SomeClass
{
public override string ToString()
{
return "This is my new text representation of the object.";
}
}
Uwaga: metoda
ToString()dostępna jest domyślnie w każdym obiekcie, więc aby ją przeładować na inną, trzeba użyć słwa kluczowegooverride.
Praktyczny przykład
W poniższym przykładzie używamy metody Console.WriteLine(), która wypisuje w konsoli tekst, który może zostać utworzony z przekazanego w argumencie obiektu - do czego wykorzystywana jest metoda ToString().
using System;
namespace Application
{
public class Program
{
public static void Main()
{
SomeClass someObject = new SomeClass();
Console.WriteLine(someObject); // someObject jest automatycznie konwertowany na tekstową reprezentację.
}
}
public class SomeClass
{
public override string ToString()
{
return "This is my new text representation of the object.";
}
}
}
Wynik programu:
This is my new text representation of the object.
ToString() przy debugowaniu
Aby lepiej zobrazować zalety przeładowywania metody ToString(), posłużymy się poniżej następujących przykładem: poprzez przeładowanie metody ToString() nie musimy rozwijać obiektów typu Student w narzędziach debugera, aby zobaczyć, gdzie jakie są używane.