Care sunt diferențele funcționale cele mai importante dintre C # și VB.NET?

Desigur, există diferența în sintaxa generală, dar ce alte distincții critice există? Există diferențe unele , nu?

0
fr hi bn
Cred că lipsa unei dezbateri religioase cu privire la această chestiune este o indicație a cât de asemănătoare sunt acestea. :)
adăugat autor EBGreen, sursa

14 răspunsuri

Comparațiile corelate sunt foarte amănunțite, însă, în ceea ce privește diferențele principale, aș lua în considerare următoarele:

  • C# has anonymous methodsVB has these now, too
  • C# has the yield keyword (iterator blocks)VB11 added this
  • VB supports implicit late binding (C# has explicit late binding now via the dynamic keyword)
  • VB supports xml literals
  • VB is case insensitive
  • More out-of-the-box code snippets for VB
  • More out-of-the-box refactoring tools for C#Visual Studio 2015 now provides the same refactoring tools for both VB and C#.

În general, lucrurile pe care statele membre se concentrează pe fiecare diferă, deoarece cele două limbi sunt orientate către segmente de public foarte diferite. Acest post pe blog are un rezumat bun al publicului țintă. Este probabil o idee bună să determinați publicul în care vă aflați, deoarece va determina ce fel de instrumente veți obține de la Microsoft.

0
adăugat
Hei andre_ss6, nu știu de ce a fost respinsă ediția dvs., am vrut să o accept, dar 3 moronini îl respinsese deja. O să rezolv eu acum.
adăugat autor Luke, sursa
De asemenea, C# acceptă și o formă de legare târzie, prin intermediul cuvântului cheie dynamic . Acest lucru este încă diferit de VB.Net: în VB permiteți legarea prin activarea sau dezactivarea opțiunii "Opțiunea strictă" la nivel de proiect sau la nivel de fișier. În C#, suportul de întârziere a legării este mai explicit (la nivelul instrucțiunii), prin utilizarea cuvântului cheie dynamic .
adăugat autor jeroenh, sursa
VB are funcții anonime, doar atâta timp cât acestea returnează o valoare. Nu există o metodă anonimă. O metodă, prin definiție, este o funcție numită care presupune implicit o referință de obiect.
adăugat autor Jonathan Allen, sursa
VB nu are cuvântul cheie de randament pe care C# îl acceptă
adăugat autor AlwaysAProgrammer, sursa
După cum au subliniat și ceilalți, VB are și cuvântul cheie Yield , acesta a fost adăugat în VB 11. De asemenea, C# suportă întârzierea implicită întârziată, de asemenea, prin tipul dynamic 4); se comporta ca tipul Object în VB cu opțiunea Strict Off. Și, în fine, VS 2015 permite aceleași instrumente de refactorizare atât pentru C#, cât și pentru VB.
adăugat autor andre_ss6, sursa

Când ajunge la IL toate biții ei. Insensibilitatea cazului este doar un pas precompilator. Dar consensul general este că vb este mai verbose. Dacă puteți scrie C# de ce nu vă salvați ochii și mâinile și scrieți cantitatea mai mică de cod pentru a face același lucru.

0
adăugat

Acest subiect a avut o mulțime de timp de față de când .Net 2.0 a fost lansat. Consultați acest articol Wikipedia pentru un rezumabil lizibil.

0
adăugat

Din moment ce presupun că puteți Google, nu cred că un link către mai multe site-uri este ceea ce căutați.

Răspunsul meu: alegeți baza pentru istoricul dezvoltatorilor dvs. C# este mai mult ca JAVA, și probabil ca C ++. VB.NET a fost mai ușor pentru programatorii VB, dar cred că nu este o problemă cu adevărat sine, nu există programatori noi .NET proveniți de la VB vechi.

Opinia mea este că VB este mai productiv decât C#, se pare că este întotdeauna în avantaj în ceea ce privește instrumentele de productivitate (cum ar fi intelisense), și aș recomanda vb over C# la cineva care întreabă. Desigur, cineva care știe că preferă C# nu va întreba și C# este probabil alegerea potrivită pentru el.

0
adăugat
Vă presupuneți foarte mult;)
adăugat autor Ant, sursa

Aceasta poate fi considerată sintaxă, dar VB.NET este sensibil în în timp ce C# este cazul sensibil .

0
adăugat
Nu consider că este o caracteristică ...
adăugat autor Michael Haren, sursa
Este o caracteristică bună. Mergeți mai departe, încercați să debugați o grămadă de cod în care aveți intcounter și intCounter fiind două variabile diferite. Nu ar trebui să existe nicio diferență între cele două. Sensibilitatea cazului este o rămășiță din zile când puterea de calcul a fost mult mai scumpă (și parsarea unei linii în care "A" <> "a" este mai rapidă decât imaginându-se că sunt într-adevăr aceleași).
adăugat autor David, sursa

One glaring difference is in how they handle extension methods (Vb.Net actually allows something that C# doesn't - passing the type on which the extension method is being defined as ref): http://blog.gadodia.net/extension-methods-in-vbnet-and-c/

0
adăugat

One glaring difference is in how they handle extension methods (Vb.Net actually allows something that C# doesn't - passing the type on which the extension method is being defined as ref): http://blog.gadodia.net/extension-methods-in-vbnet-and-c/

0
adăugat
Păcat că nu există nici un avertisment dacă cineva încearcă să utilizeze o astfel de metodă de extensie într-un context numai pentru citire (compilatorul copiază valoarea și transmite copia ca parametru ref - grr).
adăugat autor supercat, sursa

This is a very comprehensive reference.

0
adăugat

În afară de sintaxă, nu mai mult. Ambele compilați la exact același IL, astfel încât să puteți compila ceva ca VB și să îl reflectați în C #.

Majoritatea diferențelor aparente sunt zahărul sintactic. De exemplu, VB pare să susțină tipuri dinamice, dar într-adevăr sunt la fel de statice ca și C# - compilatorul VB le calculează.

Visual Studio se comportă diferit cu VB decât cu C# - ascunde multe funcționalități, dar adaugă compilarea de fundal (excelentă pentru proiecte mici, hogging de resurse pentru cele mari) și suport mai bun pentru fragmente.

Cu mai multe compilatoare "magice" în C# 3 VB.Net a căzut cu adevărat în urmă. Singurul lucru pe care VB are acum că C# nu este cuvântul cheie handles - și asta este un avantaj discutabil.

@Tom - that really useful, but a little out of date - VB.Net now supports xml docs too with '''

@Luke - VB.Net încă nu are anon-metode, dar nu suportă acum lambda.

0
adăugat
Da, bineînțeles. VB acceptă xml inline - încă nu sunt sigur de beneficiul amestecării datelor și codului de genul acesta.
adăugat autor Keith, sursa
În total, uitați suportul xml al VB.
adăugat autor Jonathan Allen, sursa

Cea mai mare diferență în opinia mea este capacitatea de a scrie cod nesigur în C #.

0
adăugat

Deși VB.NET acceptă încercați ... manipulare excepție de manipulare de tip, aceasta are încă ceva similar cu VB6 e pe eroare. La eroare pot fi abuzate serios, iar în marea majoritate a cazurilor, încercați ... captura este mult mai bună; dar pe ERROR poate fi utilă atunci când se manipulează operațiile de temporizare COM unde eroarea poate fi blocată, decodificată și finalul "încercați din nou" este o linie simplă. Puteți face același lucru cu încercați ... capturați, dar codul este mult mai confuz.

0
adăugat

Da VB.NET a rezolvat majoritatea problemelor VB6 și a făcut-o o limbă PPE adecvată - adică. Similar în abilitățile la C #. AlthougnI tind să preferă C#, găsesc vechea construcție VB ON ERROR utilă pentru manipularea timeout-urilor interop COM. Ceva ce trebuie folosit cu intelepciune - EROARE este usor abuzat !!

0
adăugat

Scott Hanselman recently wrote an interesting article contrasting var and Dim: Back to Basics: var != Dim

0
adăugat

Acest subiect este descris pe scurt la wikipedia și harding.

http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Visual_Basic_.NET http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

Trebuie doar să treci și să-ți faci notele în legătură cu asta.

0
adăugat