No me refiero a fundición dinámica en el sentido de convertir una interfaz inferior o clase base en una clase más derivada, me refiero a tomar una definición de interfaz que he creado y luego convertir dinámicamente a esa interfaz un objeto diferente NO derivado desde esa interfaz, pero compatible con todas las llamadas.¿El C# 4 permitirá "fundición dinámica"? Si no, ¿debería C# apoyarlo?
Por ejemplo,
interface IMyInterface
{
bool Visible
{
get;
}
}
TextBox myTextBox = new TextBox();
IMyInterface i = (dynamic<IMyInterface>)myTextBox;
Esto podría lograrse en tiempo de compilación para los tipos conocidos, y de tiempo de ejecución para las instancias declaradas con dinámica. La definición de interfaz es conocida, como es el tipo (en este ejemplo), por lo que el compilador puede determinar si el objeto admite las llamadas definidas por la interfaz y realizar alguna magia para que tengamos el molde.
Supongo que esto no es compatible con C# 4 (no pude encontrar una referencia), pero me gustaría saberlo con certeza. Y si no es así, me gustaría discutir si debe incluirse en una futura variante del lenguaje o no, y las razones a favor y en contra. Para mí, parece una buena adición para permitir un mayor polimorfismo en el código sin tener que crear tipos completamente nuevos para ajustar los tipos de marcos existentes.
actualización
Para que nadie me acuse de plagio, yo no era consciente de Jon Skeet having already proposed this. Sin embargo, es bueno saber que pensamos en una sintaxis muy similar, lo que sugiere que al menos podría ser intuitiva. Mientras tanto, "tener una idea original" permanece en mi lista de deseos para otro día.
¿No es esto esencialmente tipado estructural (http://en.wikipedia.org/wiki/Structural_typing)? – Noldorin
@Noldorin: Gracias, no sabía que tenía un nombre. Al examinar eso, diría que sí, así es. –
@Jeff: Sí, ahora estoy bastante seguro de que * son * las mismas cosas, a pesar de que algunos de los comentarios en la publicación del blog de Jon Skeet lo describen como tipado de pato (que es sutilmente diferente del tipado estructural). Sea lo que sea, es una muy buena idea ... algo que desear en C# 5 tal vez. :) – Noldorin