La programació dinàmica en C# permet als desenvolupadors escriure codi que pot adaptar-se a diferents tipus de dades en temps d'execució. Això és especialment útil quan es treballa amb dades que no es poden tipar de manera estàtica en temps de compilació. En aquest tema, explorarem com utilitzar el tipus dynamic
en C#, les seves aplicacions, avantatges i desavantatges, així com exemples pràctics i exercicis.
Continguts
- Introducció al Tipus
dynamic
- Diferències entre
dynamic
iobject
- Avantatges i Desavantatges de la Programació Dinàmica
- Exemples Pràctics
- Exercicis Pràctics
- Introducció al Tipus
dynamic
dynamic
El tipus dynamic
es va introduir en C# 4.0 i permet que les operacions en objectes es resolguin en temps d'execució en lloc de temps de compilació. Això significa que el compilador no comprova la validesa de les operacions en objectes de tipus dynamic
fins que el programa s'executa.
Exemple Bàsic
dynamic variable = 10; Console.WriteLine(variable); // Sortida: 10 variable = "Hola, món!"; Console.WriteLine(variable); // Sortida: Hola, món! variable = new { Nom = "Joan", Edat = 30 }; Console.WriteLine(variable.Nom); // Sortida: Joan
En aquest exemple, la variable variable
pot contenir un enter, una cadena o un objecte anònim, i les operacions es resolen en temps d'execució.
- Diferències entre
dynamic
i object
dynamic
i object
Tot i que dynamic
i object
poden semblar similars, hi ha diferències clau entre ells:
Característica | dynamic |
object |
---|---|---|
Resolució de tipus | Temps d'execució | Temps de compilació |
Comprovació de tipus | No es comprova en temps de compilació | Es comprova en temps de compilació |
Flexibilitat | Alta | Moderada |
Necessitat de conversió | No necessària | Necessària |
Exemple Comparatiu
// Usant dynamic dynamic dynVar = "Hola"; Console.WriteLine(dynVar.Length); // Funciona en temps d'execució // Usant object object objVar = "Hola"; // Console.WriteLine(objVar.Length); // Error de compilació Console.WriteLine(((string)objVar).Length); // Funciona després de la conversió
- Avantatges i Desavantatges de la Programació Dinàmica
Avantatges
- Flexibilitat: Permet escriure codi més flexible que pot treballar amb diferents tipus de dades.
- Interoperabilitat: És útil quan es treballa amb biblioteques COM, APIs dinàmiques o dades JSON on els tipus no es coneixen en temps de compilació.
Desavantatges
- Rendiment: Pot ser més lent que el codi tipat estàticament, ja que les operacions es resolen en temps d'execució.
- Errors en temps d'execució: Els errors que normalment es detectarien en temps de compilació es detecten en temps d'execució, la qual cosa pot fer que el depuratge sigui més difícil.
- Exemples Pràctics
Exemple 1: Interoperabilitat amb COM
dynamic excelApp = Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application")); excelApp.Visible = true; excelApp.Workbooks.Add(); dynamic sheet = excelApp.ActiveSheet; sheet.Cells[1, 1].Value = "Hola, Excel!";
Exemple 2: Treballant amb JSON
string json = "{ \"Nom\": \"Anna\", \"Edat\": 25 }"; dynamic data = Newtonsoft.Json.JsonConvert.DeserializeObject(json); Console.WriteLine(data.Nom); // Sortida: Anna Console.WriteLine(data.Edat); // Sortida: 25
- Exercicis Pràctics
Exercici 1: Treballant amb Tipus Dinàmics
Crea un programa que utilitzi el tipus dynamic
per emmagatzemar diferents tipus de dades i realitzar operacions amb ells.
Solució
dynamic variable = 5; Console.WriteLine(variable * 2); // Sortida: 10 variable = "Hola"; Console.WriteLine(variable.ToUpper()); // Sortida: HOLA variable = new { Nom = "Pere", Edat = 40 }; Console.WriteLine(variable.Nom); // Sortida: Pere
Exercici 2: Interoperabilitat amb una API Dinàmica
Utilitza el tipus dynamic
per treballar amb una API dinàmica (per exemple, una API JSON) i extreu informació d'un objecte JSON.
Solució
string json = "{ \"Producte\": \"Ordinador\", \"Preu\": 999.99 }"; dynamic producte = Newtonsoft.Json.JsonConvert.DeserializeObject(json); Console.WriteLine($"Producte: {producte.Producte}, Preu: {producte.Preu}"); // Sortida: Producte: Ordinador, Preu: 999.99
Conclusió
La programació dinàmica en C# ofereix una gran flexibilitat i és especialment útil en situacions on els tipus de dades no es poden determinar en temps de compilació. Tot i això, és important utilitzar-la amb precaució per evitar errors en temps d'execució i problemes de rendiment. Amb la pràctica i la comprensió adequada, el tipus dynamic
pot ser una eina poderosa en l'arsenal d'un desenvolupador de C#.
Curs de Programació en C#
Mòdul 1: Introducció al C#
- Introducció al C#
- Configuració de l'Entorn de Desenvolupament
- Programa Hello World
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
Mòdul 2: Estructures de Control
Mòdul 3: Programació Orientada a Objectes
Mòdul 4: Conceptes Avançats de C#
- Interfícies
- Delegats i Esdeveniments
- Genèrics
- Col·leccions
- LINQ (Consulta Integrada al Llenguatge)
- Programació Asíncrona
Mòdul 5: Treballant amb Dades
Mòdul 6: Temes Avançats
- Reflexió
- Atributs
- Programació Dinàmica
- Gestió de Memòria i Recollida d'Escombraries
- Multifil i Programació Paral·lela
Mòdul 7: Construcció d'Aplicacions
Mòdul 8: Millors Pràctiques i Patrons de Disseny
- Estàndards de Codificació i Millors Pràctiques
- Patrons de Disseny
- Proves Unitàries
- Revisió de Codi i Refactorització