ci sono molti casi in cui si è già utilizzando la tipizzazione dinamica e dinamica vincolante oggi. Semplicemente non te ne rendi conto, perché è tutto nascosto dietro stringhe o System.Object
, dal momento che fino al C# 4, il supporto necessario non c'era.
Un esempio è l'interoperabilità COM: COM è in realtà un sistema a oggetti semi-dinamico. Quando si esegue l'interoperabilità COM, molti metodi restituiscono effettivamente un oggetto dinamico, ma poiché C# non li supporta, sono stati restituiti come System.Object
e si è dovuto eseguire il cast da soli, con la possibilità di rilevare eccezioni lungo il percorso.
Un altro esempio è l'interazione con dati digitati dinamicamente (o anche non tipizzati), come JSON, CSV, HTML, XML di schemi, servizi Web di schemi, database di schemi (che sono, dopo tutto, la nuova hotness). Oggi usi le stringhe per quelli.Un'API XML sarebbe simile a
var doc = new XmlDocument("/path/to/file.xml");
var baz = doc.GetElement("foo").GetElement("qux");
e così via. Ma come circa:
dynamic doc = new XmlDocument("/path/to/file.xml");
var baz = doc.foo.qux;
Non che un aspetto gradevole?
Un terzo esempio è la riflessione. Oggi, l'invocazione di un metodo tramite riflessione viene effettuata passando una stringa a InvokeMember
(o qualunque cosa venga chiamata la cosa). Non sarebbe più bello, sai, invocare solo quella dannata cosa?
Quindi, c'è generazione di dati dinamici (sostanzialmente l'opposto del secondo esempio). Ecco un esempio di come generare un po 'di XML dinamica:
dynamic doc = new XmlBuilder();
doc.articles(id=42, type="List",() => {
article(() => {
number(42);
title("blahblubb");});});
Questo non è così bello come il Rubino equivalente, ma è il meglio che ho potuto venire con un preavviso così breve :-)
E ultimo ma certamente non meno importante, l'integrazione con un linguaggio tipizzato dinamicamente. Che si tratti di JavaScript in un'applicazione Silverlight, un motore di regole personalizzate incorporato nell'app aziendale o un'istanza DLR ospitata nel programma CAD/IDE/editor di testo.
See: http://stackoverflow.com/questions/253460/what-is- the-pratico-use-of-dynamic-variable-in-c-4-0 –
Oltre agli oggetti COM, sono abbastanza fermamente convinto che in realtà non siano particolarmente utili in C# /. NET e una soluzione migliore esiste quasi sempre ... – Noldorin
Oh, e si interpone con linguaggi dinamici come IronPython, ovviamente. È puro C#, ma non ha posto. – Noldorin