Klasa "Object" w języku C# to "matka wszystkich klas" jakie występują w całym języku i jakie kiedykolwiek utworzycie w swoim kodzie. Warto się dowiedzieć co nieco o tej klasie czym jest, jakie ma właściwości i metody oraz dlaczego Was to powinno obchodzić jako programistów. Zapraszam!

"OBJECT" W JĘZYKU C# "MAMUSIĄ" WSZYSTKICH KLAS I OBIEKTÓW

Pieszczotliwie jak na klasę macierzystą, aczkolwiek to święta prawda. Użytkownicy języka Java też z pewnością sobie przypominają klasę o takiej samej nazwie i nic się nie zmieniło od tej strony. Są tu osoby programujące w Kotlinie? To rzucę hasłem "Any" (pozdrawiam wszystkich, którzy uczą się Kotlina u mnie!) i też powinno być wszystko jasne.

W wyżej wymienionych językach chodzi o to samo. Klasa "Object" to klasa od której dziedziczy każda klasa bez wyjątku. Nie ma znaczenia czy to "StreamWriter", "Exception", czy jakakolwiek dowolna klasa niestandardowa, zawsze powstaje dziedziczenie pomiędzy nią, a klasą "Object". Nawet jeśli nie dodaliście żadnej relacji w definicji klasy, nie szkodzi. Język C# robi to za Was potajemnie:

class MyClass : Object
{
	
}

Klasa "Object" w języku C# udostępnia parę metod, które mogą zostać jak najbardziej przesłonięte. Nawiązałem do metody "toString" w trakcie pisania o języku Java, nie omieszkałem pominąć tej samej metody podczas tłumaczenia Kotlina i także tu w tym miejscu, nie zawaham się podać za przykład metody "ToString" (teraz pisanej wielką literą!), którą się łatwo przesłania i daje spore korzyści.

METODY KLASY "OBJECT"

Niczego więcej się nie da konkretnego napisać o samej klasie, zatem wtrącę od razu czym może się pochwalić. Metody jakimi dysponuje "Object" w języku C# kierują się przede wszystkim dawaniem informacji o samym obiekcie, ale także możliwością dostosowania do własnych potrzeb. A to za sprawą przesłaniania, które już jest Wam dobrze znane (mam nadzieję).

TOSTRING

Metoda "ToString" jest moim zdaniem najbardziej uniwersalna w użyciu, z której często będziecie korzystać jak ją tylko poznacie. Zwraca ona łańcuch znaków domyślnie przyjmujący postać ciągu w formie:

[przestrzeń nazw, w której znajduje się klasa].[klasa]

lub:

[klasa]

Przesłanianie metody "ToString" należącej do "Object" w języku C#, odbywa się w sposób następujący:

public override string ToString()
{
	return [łańcuch znaków];
}

porównując do Javy:

@Override
public string toString()
{
	return [łańcuch znaków];
}

Tłumacząc jednym zdaniem uzasadnienie tej fatygi. Możecie dostosować sobie wartość wyjściową dla klasy (albo struktury) tak, aby ta treść "mówiła" coś sensownego o instancjach. Na przykład dla punktu w dwuwymiarowym układzie współrzędnych może to być matematyczny zapis współrzędnej w nawiasach okrągłych, czyli:

public override string ToString() => string.Format("({0}, {1})", x, y);

W ten sposób implementujecie zachowanie, które może przynieść jakieś istotne informacje o obiekcie. A propos zastosowania: wystarczy, że w miejsce parametru metody "Console.WriteLine" podacie samą etykietę instancji i to wszystko:

Point point = new Point(6.0, 2.0);

Console.WriteLine(point);
FINALIZE

Oto drugi przykład. "Finalize" ma ścisły związek z destruktorem klasy opisanym już wcześniej. Metoda odpowiada za usunięcie wszelkich śladów istnienia obiektu celem odzyskania przyznanej pamięci, zanim tym tematem zainteresuje się "odśmiecacz pamięci" zwany "Garbage Collector".

~Point()
{
	
}

Z reguły nie podaje się nagłówka metody z nazwą "Finalize" celem przesłonięcia, tylko korzysta się z destruktora jak powyżej. To jest to samo.

To nie są wszystkie metody, to są tylko dwa przykłady. Pełny zestaw informacji na temat wszystkich metod klasy "Object" w języku C# możecie znaleźć w oficjalnej dokumentacji.

Klasa "Object" w języku C#

"Object" to klasa "matka" wszystkich innych klas jakie się znajdują (albo będą się znajdować) w każdym kodzie źródłowym. Czy klasa tego chce, czy nie, czy zostało to zdefiniowane, czy nie, zawsze bezpośrednio albo pośrednio dziedziczy od klasy "Object".


Koniec. Najbardziej mi zależało na przedstawieniu klasy "Object" (czym ona jest) i metody "ToString" (dlaczego warto ją przesłaniać). Resztę traktuję jako fragmenty wiedzy niższego priorytetu.

PODOBNE ARTYKUŁY