Forskellen er ens, det er bare farverne der lyder anderledes!
De to nye sprog baserer sig begge på CLR motoren og Framework Base Classes, og tilbyder den samme funktionalitet. Eneste forskel er at man i C# har mulighed for at benytte \"unmanaged code\", dvs. slå CLR\'s funktioner fra og selv håndtere dem, hvilket kun vil være hensigtsmæssigt i meget få tilfælde.
Så valget af sprog afhænger af hvilken syntaks du bedst kan lide, hvad du har programmeret i før osv.
Min personlige favorit er C#, og jeg har også på fornemmelsen, at det vil være det sprog Microsoft vil satse mest på i fremtiden
Der er lidt flere forskelle. C# er case-sensitiv. Den ligger lidt mere direkte op af alle IL-typerne. Jeg har selv deltaget i en åndsvag debat om det tidligere her på æg-sperten:
Nederst ridser jeg C# op. Det handler mest om forskellen på C# og C++. Men der er f.eks. også delegates. Det har VB.NET heller ikke. Køb en bog om emnet.
Fra C# Specifikationen: <B>10.10.6 Optional instance constructor parameters</B> The this(...) form of an instance constructor initializer is commonly used in conjunction with overloading to implement optional instance constructor parameters. In the example <CODE>class Text { public Text(): this(0, 0, null) {} public Text(int x, int y): this(x, y, null) {} public Text(int x, int y, string s) { // Actual constructor implementation } } the first two instance constructors merely provide the default values for the missing arguments. Both use a this(...) constructor initializer to invoke the third instance constructor, which actually does the work of initializing the new instance. The effect is that of optional instance constructor parameters: Text t1 = new Text(); // Same as Text(0, 0, null) Text t2 = new Text(5, 10); // Same as Text(5, 10, null) Text t3 = new Text(5, 20, \"Hello\"); </CODE>
Optional er lidt irrelevant da du bare kan overloade metoden som en version uden optional parametren, og så kalde den første metode med den default værdi du ville have, det kan ikke erstatte funktionaliteten 100% men er nok til 99.99% af de uendelig få tilfælde hvor en optional parameter ville være smart :)
En af de ting der virkelig irriterer mig ved VB'en (nu hvor de endelig har lavet det OO), er at de ikke har overloading af operatorer...
Så det er langt mere ubehageligt at lave ting som DateTime myDate = DateTime.Now+new TimeSpan(1, 0, 0); i VB, end det er i C#...
Og før nogen siger "hvor fanden skulle man bruge det", så er et at de meget relevante steder netop på "cache timeout'en" hvis du vil sætte den til en absolut værdi :)
Som der var en der nævnte som læner C# sig tættere opad IL value-typerne, eller snarere, der er flere af dem med, disse kan dog ikke bruges udad til hvis assembly skal kunne bruges af f.eks VB.NET, men man kan med en assembly-option sørge for at compileren fortæller hvis man har brugt en ulovlig value-type...
De value-types vi her snakker om er at der både er unsigned/signed versioner af en hel masse forskellige typer, det er der ikke i VB...
Omkring det med "meget få ting man kan bruge unmanaged code til", så kommer det kraftigt an på hva' man laver... F.eks er netop pixel-baseret billedbehanding en af de ting som virkelig er nice med pointer aritmetik, i forhold til at skulle boxe/unboxe hver eneste pixel... Så et eksempel med tids-sammenligner på MSDN, safe-code versionen omkring 10-11 sekunder. Unsafe versionen hvor der blev brugt pointer aritmetik, 0.5 sekunder...
En anden ting er at selve syntax og sproget i C# ligger mere opad C++, som er trods alt blevet bygget til programmører, hvor VB reelt (sprog mæssigt) blev bygget til folk der ikke kunne programmere... Der ved ligger at syntasen i C++ og der ved C# er langt stærkere...
F.eks, lad os sige at du har en SQL select hvor du hiver en varchar ud, men denne kan være null... Så kan du i C# gøre følgende (hvis det er column 0 strengen er i, og du vil have en blank "" streng hvis dataene er null, og mySQLReader er din SqlDataReader) :
If (mySqlReader.IsDBNull(0)) Then myString = "" Else myString = mySqlReader.GetString(0) End If
I et enkelt udtræk vil det ved første øjekast være mere forståeligt med VB'en, men jeg garanterer at når du skal hive 20 variable som en eller anden abe har tilladt at være null ud af databasen, så vil du næsten græde snot af glæde og bare at kunne bruge "expression ? value : value" syntaksen...
I det hele taget så er der en "masse ekstra tekst" i vb som bare gør at det tager længere tid at skrive selve sourcekoden :)
Du spørger om hvad der taler for C# og hvad der taler for VB.NET.
Jeg tror at det er lettere og hurtigere at komme igang på VB.NET end C# - specielt hvis man er vant til VB. Når man så er i gang og synes det kunne være sjovt med en udfordring, kunne man prøve at lave noget kode i C#.
Generelt skal man ikke skrive så mange overflødige ord i C# som man skal i VB.NET.
Det er en smagssag om man fortrækker VB eller C#!!!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.