Jason. Cała informatyka w jednym miejscu!

Idziemy dalej. Temat jaki teraz zademonstruję ukazywać będzie zjawisko "rzutowania" typu danych. Rzutowanie typu w języku C# to powszechny manewr występujący w wielu językach wysokiego poziomu. Sprawdzimy na czym to dokładnie polega.

RZUTOWANIE TYPU W JĘZYKU C# WNIOSKIEM O POTRAKTOWANIE TYPU JAKO INNY

Zapis w kodzie polegający na wstawieniu wewnątrz nawiasów okrągłych konkretnego typu danych zaraz przed nazwą zmiennej nazywany jest "rzutowaniem typu". Rzutowanie typu to technika polegająca na podjęciu próby takiego manewru, aby dana zmienna była "traktowana" przez kompilator jako zupełnie inny typ. Dokładniej, chodzi mi o coś takiego:

float f = 14.58f;
int i = (int)f;

i to się stosuje do typów prostych np. z "float" do "int" (choć dużo lepiej skorzystać z odpowiednich metod konwertujących), ale też obiektów na mocy postulatu polimorfizmu (wielopostaciowości):

Wolf wolf = new Wolf();
Animal animal = (Animal)wolf;

DWA RODZAJE RZUTOWANIA

Rzutowanie typu w języku C# możemy podzielić na jawne i automatyczne. Jawne to po prostu...jawne :D! Wstawione przez nas samych:

int i = (int)56.78;

a kiedy mamy do czynienia z rzutowaniem automatycznym? Głównie to przypadki metod, które wymagają za parametr instancji klasy bazowej, a wprowadzamy do wywołania klasę potomną:

class Program
{
	static void Main(string[] args)
	{
		Wolf wolf = new Wolf();
		
		DoSomething(wolf);
	}
	
	void DoSomething(Animal animal)
	{
		// instrukcje
	}
}

Wtedy to wywołanie:

DoSomething(wolf);

kompilator będzie "widział" jako:

DoSomething((Animal)wolf);

i sam zastosuje rzutowanie typu w języku C#. Za dowód niech posłuży fakt, iż wstawienie takiej samej klauzuli jawnie nie robi żadnej różnicy dla kompilatora. Jemu to "lotto" ;).

WSZYSTKO MA SWOJE GRANICE

Ustalmy jedną rzecz. Niech nie zgubi Was swobodne myślenie, że od teraz poznawszy tę technikę możecie sobie rzutować co chcecie na dowolny nawet absurdalny typ np. wartość "null" na jakiś typ klasowy. Będziecie z tego korzystać? To wiedzcie, że C# jest przygotowany na bzdury i wszelkie próby rzutowania na coś pozbawionego sensu skończą się zgłoszeniem wyjątku typu "InvalidCastException" i wyautowaniem Waszego programu z listy działających procesów :O!

Rzutowanie typu w języku C#

Rzutowanie typu to wymuszenie podanego przez nas typu, aby dany obiekt był traktowany jak kompilator jak ten, który został podany. Nie oznacza to, że nie jest on przygotowany na absurdalne rzeczy.


Tak się prezentuje rzutowanie typu. Temat wyjaśniony, zostaliście uprzedzeni o konsekwencjach. Wszystko na ten temat.

PODOBNE ARTYKUŁY