Typ dynamic
Odrocz rozpoznawanie typu do czasu działania za pomocą dynamic.
Typ dynamic to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 4 lekcji w sumie.
Czym jest dynamic?
Typ dynamic pomija sprawdzanie typów w czasie kompilacji. Dostęp do składowych i operacje są rozstrzygane dopiero w czasie wykonywania.
using System;
class Program {
static void Main() {
dynamic value = 10;
Console.WriteLine(value + 5);
}
}Ponowne przypisywanie różnych typów
Zmienna dynamic może przechowywać wartości dowolnego typu, a jej typ może zmieniać się przy kolejnych przypisaniach.
using System;
class Program {
static void Main() {
dynamic x = 1;
Console.WriteLine(x);
x = "now a string";
Console.WriteLine(x);
}
}Wiązanie w czasie wykonywania
W przypadku dynamic kompilator ufa programiście. Wyszukiwanie metod i właściwości odbywa się podczas wykonywania wiersza, a nie podczas jego kompilowania.
using System;
class Program {
static void Main() {
dynamic text = "hello";
Console.WriteLine(text.ToUpper());
}
}Błędy ujawniają się w czasie wykonywania
Ponieważ sprawdzanie jest odroczone, nieprawidłowa składowa powoduje zgłoszenie wyjątku RuntimeBinderException w czasie wykonywania zamiast błędu kompilacji.
using System;
using Microsoft.CSharp.RuntimeBinder;
class Program {
static void Main() {
dynamic n = 5;
try {
n.NoSuchMethod();
} catch (RuntimeBinderException) {
Console.WriteLine("No such member");
}
}
}dynamic a var
var jest ustalany w czasie kompilacji, a dynamic pozostaje elastyczny w czasie wykonywania. Wyglądają podobnie, ale działają zupełnie inaczej.
using System;
class Program {
static void Main() {
var fixedType = 10;
dynamic flexible = 10;
flexible = "changed";
Console.WriteLine(fixedType + " " + flexible);
}
}Działania arytmetyczne na dynamic
Operatory użyte dla dynamic są rozstrzygane w czasie wykonywania na podstawie rzeczywistych wartości.
using System;
class Program {
static void Main() {
dynamic a = 3;
dynamic b = 4;
Console.WriteLine(a * b);
}
}Wartości zwracane typu dynamic
Metoda może zwracać dynamic, gdy typ rzeczywiście się zmienia, ale osoby wywołujące tę metodę tracą pomoc kompilatora dostępną w czasie kompilacji.
using System;
class Program {
static dynamic GetValue(bool flag) {
return flag ? (dynamic)42 : "text";
}
static void Main() {
Console.WriteLine(GetValue(true));
Console.WriteLine(GetValue(false));
}
}Przypadki użycia dynamic
dynamic pomaga w integracji z COM, pracy z danymi podobnymi do JSON oraz wywoływaniu kodu, którego struktura jest nieznana aż do czasu wykonywania.
using System;
class Program {
static void Main() {
dynamic data = 100;
data += 1;
Console.WriteLine(data);
}
}Koszt wydajnościowy
Wiązanie w czasie wykonywania wiąże się z narzutem. W ciasnych pętlach lub prostym kodzie należy preferować typy statyczne ze względu na szybkość i bezpieczeństwo.
using System;
class Program {
static void Main() {
int fast = 0;
for (int i = 0; i < 5; i++) fast += i;
Console.WriteLine(fast);
}
}Brak funkcji IntelliSense
Edytory nie mogą podpowiadać składowych dla typu dynamic, ponieważ jego typ jest nieznany aż do czasu wykonywania. Spowalnia to pracę.
using System;
class Program {
static void Main() {
dynamic s = "Code";
Console.WriteLine(s.Length);
}
}Używać oszczędnie
Po dynamic należy sięgać tylko wtedy, gdy typowanie statyczne rzeczywiście nie pozwala wyrazić danego scenariusza; w przeciwnym razie należy preferować typy konkretne.
using System;
class Program {
static void Main() {
dynamic flexible = 7;
Console.WriteLine(flexible.GetType().Name);
}
}Szybkie sprawdzenie
Proszę sprawdzić zrozumienie działania dynamic.
Podsumowanie
dynamic wyłącza sprawdzanie typów w czasie kompilacji i rozstrzyga składowe w czasie wykonywania, dlatego zmienna dynamic może zmieniać typ, a nieprawidłowe wywołania powodują wyjątek RuntimeBinderException.
W przeciwieństwie do var (ustalanego w czasie kompilacji) dynamic jest elastyczny, ale obniża wydajność, nie zapewnia funkcji IntelliSense i powinien być używany oszczędnie.
Często zadawane pytania
Czy lekcja „Typ dynamic” jest bezpłatna?
Tak — pełny tekst „Typ dynamic” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Typ dynamic”?
Odrocz rozpoznawanie typu do czasu działania za pomocą dynamic. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C# Academy?
Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Typ dynamic”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?
Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wnioskowanie typu zmiennych lokalnych za pomocą var
- Kiedy unikać var
- Typ dynamic
- Wyrażenia new z typem docelowym