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

  1. Introducció al Tipus dynamic
  2. Diferències entre dynamic i object
  3. Avantatges i Desavantatges de la Programació Dinàmica
  4. Exemples Pràctics
  5. Exercicis Pràctics

  1. Introducció al Tipus 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ó.

  1. Diferències entre 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ó

  1. 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.

  1. 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

  1. 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#.

© Copyright 2024. Tots els drets reservats