Quali sono le differenze funzionali più importanti tra C# e VB.NET?
-
08-06-2019 - |
Domanda
Certamente c'è una differenza nella sintassi generale, ma quali altre distinzioni critiche esistono?Ci sono Alcuni differenze, vero?
Soluzione
I confronti collegati sono molto approfonditi, ma per quanto riguarda le differenze principali noterei quanto segue:
C# ha metodi anonimiAnche VB ha questi adessoC# ha la parola chiave yield (blocchi iteratori)VB11 ha aggiunto questo- Supporta VB associazione tardiva implicita (C# ora ha un'associazione tardiva esplicita tramite la parola chiave dinamica)
- VB supporta i valori letterali XML
- VB non fa distinzione tra maiuscole e minuscole
- Altri frammenti di codice pronti all'uso per VB
Altri strumenti di refactoring pronti all'uso per C#Visual Studio 2015 ora fornisce gli stessi strumenti di refactoring sia per VB che per C#.
In generale, gli aspetti su cui la SM si concentra per ciascuna lingua variano, perché le due lingue si rivolgono a un pubblico molto diverso. Questo post sul blog ha una buona sintesi del pubblico target.Probabilmente è una buona idea determinare a quale pubblico appartieni, perché determinerà il tipo di strumenti che riceverai da Microsoft.
Altri suggerimenti
Questo argomento è stato molto discusso da quando è stato rilasciato .Net 2.0.Guarda questo Wikipedia articolo per un riassunto leggibile.
Questa può essere considerata sintassi, ma VB.NET è il caso Insensibile mentre C# è maiuscolo e minuscolo sensibile.
Questo è un riferimento molto completo.
Dato che presumo che tu possa cercare su Google, non penso che un collegamento a più siti sia ciò che stai cercando.
La mia risposta:Scegli in base alla storia dei tuoi sviluppatori.C# è più simile a JAVA e probabilmente a C++.VB.NET era più semplice per i programmatori VB, ma immagino che non sia più un problema poiché non ci sono nuovi programmatori .NET provenienti dal vecchio VB.
La mia opinione è che VB sia più produttivo di C#, sembra che sia sempre all'avanguardia in termini di strumenti di produttività (come intelisense) e consiglierei vb su C# a qualcuno che lo chiede.Naturalmente, qualcuno che sa di preferire C# non lo chiederà e probabilmente C# è la scelta giusta per lui.
Sebbene lo zucchero della sintassi su C#3 abbia davvero spinto in avanti il livello, devo dire che alcune delle cose Linq to XML in VB.Net sembrano piuttosto carine e rendono un po' più tollerabile la gestione di XML complessi e profondamente annidati.Solo un po.
Una differenza evidente sta nel modo in cui gestiscono i metodi di estensione (Vb.Net in realtà consente qualcosa che C# non consente: passare il tipo su cui viene definito il metodo di estensione come ref): http://blog.gadodia.net/extension-methods-in-vbnet-and-c/
A parte la sintassi, non più così tanto.Entrambi vengono compilati esattamente nello stesso IL, quindi puoi compilare qualcosa come VB e rifletterlo in C#.
La maggior parte delle differenze apparenti sono lo zucchero sintattico.Ad esempio, VB sembra supportare i tipi dinamici, ma in realtà sono statici quanto quelli C#: il compilatore VB li rileva.
Visual Studio si comporta in modo diverso con VB che con C#: nasconde molte funzionalità ma aggiunge la compilazione in background (ottima per piccoli progetti, consumo di risorse per quelli di grandi dimensioni) e un migliore supporto per gli snippet.
Con sempre più "magia" del compilatore in C#3 VB.Net è davvero rimasto indietro.L'unica cosa che VB ora ha che C# non ha è il file handles
parola chiave - e questo è di discutibile vantaggio.
@Tom - davvero utile, ma un po' obsoleto - VB.Net ora supporta anche i documenti XML '''
@Luke - VB.Net non dispone ancora di metodi anonimi, ma ora supporta lambda.
La differenza più grande secondo me è la capacità di scrivere codice non sicuro in C#.
Sebbene VB.NET supporti la gestione delle eccezioni del tipo try...catch, ha ancora qualcosa di simile a ON ERROR di VB6.ON ERROR può essere seriamente abusato e, nella stragrande maggioranza dei casi, provare... catturare è molto meglio;ma ON ERROR può essere utile quando si gestiscono operazioni di timeout COM in cui l'errore può essere intercettato, decodificato e il "riprova" finale è una semplice riga.Puoi fare lo stesso con try...catch ma il codice è molto più confuso.
Questo argomento è brevemente descritto su Wikipedia e harding.
http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Visual_Basic_.NEThttp://www.harding.edu/fmccown/vbnet_csharp_comparison.html
Basta sfogliarlo e prendere appunti su questo.
Quando si arriva a IL sono solo frammenti.L'insensibilità al caso è solo un passaggio del precompilatore.Ma il consenso generale è che vb è più dettagliato.Se sai scrivere C#, perché non risparmiare occhi e mani e scrivere una quantità minore di codice per fare la stessa cosa.
Una differenza evidente sta nel modo in cui gestiscono i metodi di estensione (Vb.Net in realtà consente qualcosa che C# non consente: passare il tipo su cui viene definito il metodo di estensione come ref): http://blog.gadodia.net/extension-methods-in-vbnet-and-c/
Scott Hanselmann recentemente ha scritto un interessante articolo che mette a confronto var e Dim: Ritorno alle basi:var!= Dim
Sì, VB.NET ha risolto la maggior parte dei problemi VB6 e lo ha reso un linguaggio OOP corretto, ad es.Simile nelle capacità a C#.Anche se tendo a preferire C#, trovo utile il vecchio costrutto VB ON ERROR per gestire i timeout di interoperabilità COM.Qualcosa da usare saggiamente però: ON ERROR è facilmente abusabile!!