Nuove fantastiche funzioni di C # 4.0

Quali sono le nuove funzionalità più interessanti che voi ragazzi state cercando o che avete sentito rilasciando in C # 4.0.

Le cose dinamiche suona bene se ne hai bisogno, ma non mi aspetto di usarlo molto spesso.

La varianza generica per delegati e interfacce è simile – la mancanza di varianza è un mal di testa al momento, ma molti dei punti in cui è un dolore non saranno coperti dalla varianza limitata disponibile in C # 4.

Le caratteristiche della COM non mi interessano in modo particolare – dovrei davvero avere un maggiore controllo su quello che sono.

I parametri opzionali e denominati potrebbero fare una grande differenza quando si costruiscono tipi immutabili: abilita la syntax come:

Person p = new Person (name: "Jon", age: 32); 

senza avere combinazioni gigantesche di sovraccarichi del costruttore. Preferirei un po ‘più di supporto per la scrittura di tipi immutabili sotto forma di proprietà implementate automaticamente di sola lettura, ma non mi aspetto che li otterremo. (Di certo non sono nella lista delle caratteristiche proposte al momento.)

Personalmente sono più interessato a un paio delle funzionalità di .NET 4.0, in particolare i contratti di codice e le estensioni parallele .

Valori predefiniti dei parametri del metodo:

 public void MyMethod1(string value1 = "test", int num1 = 10, double num2 = 12.2) { //... } 

Forse anche tipi di reso anonimi:

 public var MyMethod2() { // .. } 

Le tuple

IDynamicObject , la colla dietro dynamic , consente l’interpretazione di una chiamata in fase di runtime.

Questo è interessante per scenari intrinsecamente non tipizzati come REST, XML, COM, DataSet , linguaggi dinamici e molti altri. È un’implementazione del dispatch dinamico basato sul Dynamic Language Runtime (DLR) .

Invece di una semantica di riflessione ingombrante, punti alle variabili dichiarate come dynamic . Immagina di lavorare con oggetti Javascript di Silverlight:

 dynamic obj = GetScriptObject(); HtmlPage.Window.Alert(obj.someProperty); 

La syntax di tutti i C # è supportata (credo):

 HtmlPage.Window.Alert(obj.someMethod() + obj.items[0]); 

La stessa riflessione sembra molto più pulita:

 public void WriteSomePropertyValue(object target) { Console.WriteLine((target as dynamic).SomeProperty); } public void WriteSomeMethodValue(object target, int arg1, string arg2) { Console.WriteLine((target as dynamic).SomeMethod(arg1, arg2)); } 

dynamic è un altro strumento nel toolkit. Non cambia il dibattito statico o dinamico, semplifica semplicemente l’attrito.

Supporto migliorato per Expression Trees !

Non rigorosamente C #, ma dato che .NET è taggato ecco un buon link per quanto riguarda i cambiamenti BCL .

Nota per se stessi: deve rinominare il metodo di estensione Stopwatch.Restart() prima che venga rilasciato 4.0 🙂

  • C # 2.0 -Generics (è stato aggiunto il supporto per .NET Framework e C # ne ha tratto vantaggio); pattern iteratore (la parola chiave yield); metodi anonimi (la parola chiave delegata), tipi nullable e l’operatore coalescente null (??).
  • C # 3.0 : tipi anonimi, metodi di estensione, inizializzatori di oggetti, inizializzatori di raccolta, variabili locali implicitamente tipizzate (parola chiave var), espressioni lambda (=>) e il modello di espressione della query LINQ.
  • C # 4.0 – Parametri opzionali e argomenti nominati, Tipizzazione dynamic (tipo dinamico), COM-Interop migliorata e Contra e Co-Variance.

la parola chiave dynamic sembra che possa colmare il divario tra linguaggi dinamici come IronRuby o IronPython piuttosto bene, il che probabilmente aiuterà la sua adozione nella monocoltura Microsoft … che mi eccita.

Mentre sono incuriosito da questo, sono anche preoccupato che sarà usato troppo spesso, come Generics e LINQ, SQLCLR, ecc 🙂

C # 4.0

1) PLinq

2) Parametri nominati e opzionali

3) pigro

4) Co & Contra Variance

5) Attività parallela

6) Oggetto dinamico

7) Oggetto Expando

8) Miglioramento di COM-Interop

9) Tuple

solo per citarne alcuni

La capacità di scrivere codice asincrono in modo sincrono con async e attendere è interessante.