C# - typ dynamic

Oznaczając zmienne słowem kluczowym dynamic informujemy kompilator, że podczas kompilacji nie można określić typu zmiennej i zostanie on zdefiniowany w trakcie działania programu, podczas kompilacji pomijane jest sprawdzenie poprawności typu. Kompilator zakłada, że zmienna oznaczona jako dynamic może przyjąć dowolną wartość dowolnego typu, można wręcz powiedzieć, że zmienna ta może przyjąć wynik dowolnej operacji. 

Warte uwagi jest to, że podczas działania programu można przypisywać do zmiennej dynamicznej wartości różnych typów (np. przypisać wartość typu string, by po chwili zapisać do zmiennej wartość false, czyli typu bool).


Typ dynamic - dodatkowe informacje i przykłady

Definiowanie zmiennych jako dynamic

dynamic greatVariable = 1;

Przypisywanie zmiennych różnych typów do zmiennej zadeklarowanej jako dynamic

dynamic foo = "test";
Console.WriteLine(foo.GetType());
// Output: "System.String".

foo = 10;
Console.WriteLine(foo.GetType());
// Output: "System.Int32".

Jak widać w powyższym przykładzie, istnieje możliwość zapisania w zmiennej dynamicznej różnych wartości. 

Dzięki oznaczeniu zmiennej foo jako dynamic, kompilacja odbywa się bez żadnego błędu.


Poniższy przykład także skompiluje się poprawnie, natomiast podczas wykonywania programu rzucony zostanie wyjątek. 

dynamic foo = "test";

// Wykonanie poniższej linii zostanie zakończone rzuceniem wyjątku
foo++;

Ponieważ kompilator C # nie zna typu obiektu, nie ma więc informacji o jego właściwościach i metodach. Nie jest więc w stanie określić czy operacja inkrementacji jest wspierana w tym przypadku. 

 

Konwersja na inne typy odbywa się w sposób niejawny (implicitly)

dynamic temp= 10;
int i = temp; // konwersja niejawna
		
temp = "Witaj" // zmiana przechowywanego typu;
string greet = temp; //konwersja niejawna
		
temp = DateTime.Now; // zmiana przechowywanego typu;
DateTime dt = temp; // konwersja niejawna


johny_bravo 03-02-2022 12:22
Przydałyby się informacje kiedy używać dynamic w C# bądź kiedy lepiej nie. Słowo kluczowe dynamic użyte nieumiejętnie może narobić więcej szkód niż pożytku.


© 2024 - SkillsTest.pl | | Regulamin | Polityka Prywatnosci