Non intendo il casting dinamico nel senso di trasmettere un'interfaccia inferiore o una classe base a una classe più derivata, cioè prendere una definizione di interfaccia che ho creato e quindi trasmettere dinamicamente a quell'interfaccia un oggetto diverso NON derivato da quella interfaccia ma supporta tutte le chiamate.Il C# 4 consentirà "casting dinamico"? In caso negativo, dovrebbe C# supportarlo?
Per esempio,
interface IMyInterface
{
bool Visible
{
get;
}
}
TextBox myTextBox = new TextBox();
IMyInterface i = (dynamic<IMyInterface>)myTextBox;
Ciò potrebbe essere realizzato al momento della compilazione per i tipi conosciuti, e runtime per le istanze dichiarate con dinamica. La definizione dell'interfaccia è nota, così come il tipo (in questo esempio) in modo che il compilatore possa determinare se l'oggetto supporta le chiamate definite dall'interfaccia ed eseguire un po 'di magia per noi per avere il cast.
La mia ipotesi è che questo non è supportato in C# 4 (non sono riuscito a trovare un riferimento ad esso), ma mi piacerebbe sapere con certezza. E se non lo è, mi piacerebbe discutere se dovrebbe essere incluso in una futura variante della lingua o meno, e le ragioni pro e contro. Per me, sembra una buona aggiunta per abilitare un maggiore polimorfismo nel codice senza dover creare tipi completamente nuovi per racchiudere i tipi di framework esistenti.
Aggiornamento
Per timore che qualcuno mi accusano di plagio, non ero a conoscenza di Jon Skeet having already proposed this. Comunque, è bello sapere che abbiamo pensato a una sintassi estremamente simile, il che suggerisce che potrebbe essere almeno intuitivo. Nel frattempo, "avere un'idea originale" rimane nella mia lista dei secchi per un altro giorno.
Non è questa tipizzazione essenzialmente strutturale (http://en.wikipedia.org/wiki/Structural_typing)? – Noldorin
@Noldorin: Grazie, non sapevo che avesse un nome. Scansionando oltre, direi che sì, lo è. –
@Jeff: Sì, ora sono abbastanza fiducioso che * sono * le stesse cose, anche se alcuni dei commenti sul post del blog di Jon Skeet lo descrivono come una digitazione anatra (che è sottilmente diversa dalla tipizzazione strutturale). Qualunque cosa sia, è un'idea molto carina ... forse qualcosa da desiderare in C# 5. :) – Noldorin