Más allá de C# 3.0
Una vez salidos al mercado .NET 3.5 y C# 3.0, el equipo de desarrollo ya ha comenzado a pensar en las nuevas características a incorporar al lenguaje en la próxima "ola". Para mantener al tanto a la comunidad, Charlie Calvert, Community PM de C#, ha dado inicio a una serie de posts que bajo el título "Future focus" comenzará a presentar ideas a ese respecto...
La primera propuesta, que ha causado bastante revuelo (según puede verse en la página antes mencionada), está relacionada con la adición a C# de enlace dinámico o tardío (dynamic / late binding), mediante el cual el acceso a una propiedad, método u otra característica de un objeto no se comprueba en tiempo de compilación, sino que es en tiempo de ejecución cuando se verifica si realmente el objeto soporta dicha propiedad o método, para llamarlo en caso afirmativo (o producir un error de ejecución si no existe).
El objetivo central de incluir esta especie de Option Strict Off :-) en C# es, en principio, hacer posible que se escriban en C# aplicaciones para el futuro Dynamic Language Runtime (DLR) que se montará por encima del CLR y jugará un papel importante en la próxima versión de Silverlight, haciendo posible desarrollar, además de VB, en Ruby, Python y otros lenguajes dinámicos. Otra área en las que el soporte de búsqueda dinámica de miembros puede ser útil es la automatización de Office y otros escenarios de interoperabilidad con COM; en este sentido, la adición de esta característica me recuerda lo que ocurrió hace alrededor de una década con Delphi, hasta entonces un lenguaje "puro" en lo que a control estricto de tipos se refiere.
La sintaxis que se propone (solo un esbozo, según los autores; de hecho, la impresión que me da es que no pensaron mucho en la idea antes de lanzarla al éter) es como sigue:
static void Main(string[] args)
{
dynamic
{
object myDynamicObject = GetDynamicObject();
myDynamicObject.SomeMethod(); // call a method
myDynamicObject.someString = "value"; // Set a field
myDynamicObject[0] = 25; // Access an indexer
}
}
La idea es que todo el código situado dentro del bloque dynamic podría hacer uso del enlace dinámico.
No repetiré aquí lo que dije allí, pero honestamente no me gusta la sintaxis que se plantea. Incluso se me antoja que nuestro querido lenguaje podría estropearse para siempre...