dotNed

Welkom bij dotNed Inloggen | Aanmelden | Help
in Zoeken

.NET - The place of happiness for everyone.

Uitslag 'C# vs VB.NET'

Op de bijeenkomst van gisteren is door Frans Bouma en Maurice de Beijer strijd geleverd over de vraag welke ontwikkeltaal nu beter is: C# of VB.NET. Nu ja, strijd. Plus- en minpunten van iedere taal werden belicht, mythen ontzenuwd en om het niet tot in de kleine uurtjes te laten duren werden sommige puntjes makkelijk weggegeven. Maar ieder voordeel van de één ten opzichte van de ander is ter stemming gebracht. Hier is de uitslag:

 

Voordeel voor C#

Stelling

Voordeel voor VB.NET

C# programmeurs zijn beter. Ze hebben meestal een academische achtergrond. Bovendien worden ze beter betaald.

 

 

 

 

VB.NET beschikt over optionele en named parameters. Dat maakt het geschikter voor interop met bijv. Office. Een reeks Type.Missing parameters in een methodcall is immers niet nodig.

 

 

C# beschikt in versie 2.0 over het yield return keyword. Hiermee wordt een waarde van het enumerator object teruggegeven of beëindig je een iteratie. VB.NET heeft deze mogelijkheid niet, alhoewel er wel alternatieven te bedenken zijn.

 

 

 

 

VB.NET maakt late binding veel gemakkelijker. Hierdoor is COM interop eenvoudiger te gebruiken dan in C#.

 

 

C# 2.0 beschikt over anonymous methods. Daarmee wordt voorkomen dat kleine stukjes functionaliteit een eigen methode nodig hebben en daarmee de class ‘vervuilen’. VB.NET krijgt dit waarschijnlijk in versie 9.0 (de eerstvolgende versie).

 

 

 

-

De performance van in C# geschreven code is beter. Nu, dit blijkt een mythe. Het heeft lang geduurd om iets te vinden dat in de praktijk in VB.NET trager lijkt te werken: een tien niveaus diep geneste for-next loop. Wie dergelijke code schrijft, kan wellicht beter een ander beroep en niet een andere ontwikkeltaal kiezen. Alle code wordt immers gecompileerd tot Intermediate Language (MSIL). Er zitten wel verschillen in de resulterende IL code, maar die hebben vrijwel geen effect op de performance. Conclusie hiervan is dat verbetering van performance vooral in algoritmes moet worden gezocht en niet in de taal.

 

 

-

Performance, ronde 2. Is er dan nooit sprake van betere performance in C#. Ja, maar dan verlaten we onze veilige managed omgeving, waar we ons geen zorgen hoeven te maken over geheugenbeheer. In C# kunnen we code markeren als ‘unsafe’. Daarbij moet ook de de applicatie gecompileerd wordt met de unsafe parameter. In zo’n stuk code kan met pointers, à la C++, gewerkt wordt en direct geheugen in- en uitgelezen worden. Dat is sneller, maar pas op dat je je vingers niet brandt.

 

 

 

 

VB.NET beschikt over extra mogelijkheden voor errorhandling. Unstructured error handling (‘on error resume next…’) wordtook door de huidige generatie VB.NET ontwikkelaars liefst vermeden, maar is wel mogelijk. Een meer handige feature is de Catch When instructie die extra condities toelaat voor het opvangen van een exceptie.

 

 

In Visual C# 2005 (de IDE voor C# 2.0, onderdeel van Visual Studio 2005) beschikken we standaard over een reeks refactoring mogelijkheden. In VB.NET 2005 is dat minimaal, maar om het gebrek op te vangen kan men via de MSDN site gratis een DevEpress ‘lite’ downloaden voor VB.NET die deels overlappende refactoring mogelijkheden biedt. Omdat het standaard wel in C# zit, punt voor deze taal.

 

 

 

 

Hulp bij het ontwikkelen. VB.NET 2005 wordt geleverd met een flinke verzameling codesnippets. Ook kent het de My-namespace waarmee veel voorkomende acties (bestandsbeheer, netwerk) via een soort shortcut beschikbaar zijn. Ook is er een klein application framework, waarmee via projectinstellingen veel voorkomende taken (splashscreen, single instance app) worden geregeld. Deze ondersteuning is er niet in C# en moet handmatig worden ingevuld.

 

 

Namespaces in VB.NET zijn standaard verborgen. De ontwikkelaar ziet ze niet, maar ze zijn er wel. Daardoor is men ook niet snel geneigd ervan gebruik te maken, en als men het wil, zijn er beperkingen, omdat de opgegeven namespaces altijd onder de in het project opgegeven namespace vallen. In C# is men explicieter en vrijer in het beheer van namespaces.

 

 

 

 

In VB.NET is het With-statement erg praktisch voor geneste objecten. Objecten die onderdeel zijn van een ander object die weer onderdeel is van een ander object. Met het With-stement voorkom je dat je telkens deze hiërarchie moet intikken.

 

 

½ ●

De errorlist in de IDE van VB.NET wordt direct bijgewerkt zodra men van coderegel verandert. De background compiler kijkt direct of er fouten in de code zitten en meldt dat je hier nog wat aan moet sleutelen. C# kijkt enkel naar de syntax van de code, niet naar de semantiek zoals dat in VB.NET gebeurt. Dit aspect bleek eerder een kwestie van smaak. Sommige VB.NET ontwikkelaars willen ook niet voortdurend op hun fouten gewezen worden, wetende bijvoorbeeld dat een ingevoerde methode nog geschreven moet worden. Ook kan bij grote projecten deze background compilatie het systeem belasten. Niettemin is de compiler wel heel efficient en compileert enkel de verandering. Omdat dit voordeel ook als nadeel werd ervaren, voor beide talen een half punt

 

½ ●

Los van de taal is ook de ontwikkelomgeving, de IDE, van belang. In de discussie is het daarom van belang om vast te stellen of een ontwikkeltaalverschil zit in de taal zelf, of in de tool die men gebruikt om in deze taal te programmeren.

Concluderend kon tijdens de bijeenkomst vastgesteld worden dat C# vooral correctheid nastreeft en VB.NET vooral pragmatisme. De zinsnede "C# dwingt je om..." kwam in dit verband meerdere keren terug, maar evenzeer "Met VB.NET gooi je wat dingen bij elkaar..." .

 

 Meer nuttige links:

 

Published Friday, March 24, 2006 7:50 AM door Sander_G

Comments

 

dvroegop said:

Het was een erg geslaagde avond. Ik denk dat de kern van het verhaal is: het maakt niet meer uit welke taal je gebruikt, het ligt aan je kennis van het framework en aan je kennis als programmeur.

VB.Net, C#, Delphi.Net, we zijn een grote familie :-)
March 24, 2006 7:13 PM
 

The Gryphin Experience : links for 2006-10-03 said:

October 3, 2006 11:30 PM
 

old sprint samsung cell phones said:

old sprint samsung cell phones
November 8, 2007 12:05 AM
 

1970 Ford Hardtop Torino Talladega, Victorinox Swiss Army Chrono Classic Mens said:

May 20, 2010 7:23 PM
 

1970 Chevelle Malibu Convertible Sale, Chevelle California Forum said:

May 21, 2010 7:14 AM
 

Relay 3 Clearance Front Fender Kit, Mercedes Benz 380sel Bulb Turn Signal Relay Wiper Blade said:

May 21, 2010 7:52 AM
 

S60 Bulb Low Beam Volvo S80, Volvo S80 Brake Repair said:

May 21, 2010 8:56 AM
 

1984 Honda Wagovan Head Gasket, Wagovan Used Honda Crx Truck Parts said:

May 21, 2010 9:32 AM
 

330xi Promotion Bmw 320i, 335xi Promo 330xi 335i said:

May 21, 2010 12:54 PM
 

Las Vegas Auction Nv Homes, Monte Carlo Discount Coupon Las Vegas Hotel said:

May 21, 2010 1:49 PM
 

Chrylser Modern, Chrylser Sebring Auto Parts said:

May 21, 2010 10:24 PM
 

E550 Halogen Bulbs, Mercedes Benz E550 Aftermarket Clk55 Slk55 Amg said:

May 21, 2010 11:22 PM
 

Relay 1 Headlight Auto Salvage Yard, S Relay Computer Youtube said:

May 22, 2010 2:39 AM
 

K2500 Part Chevrolet G3500, 2004 Chevrolet Trailblazer Ls Lt said:

May 22, 2010 3:50 AM
 

Sierra C3 Cadillac Escalade Auto Parts Tonneau Cover, 2009 Cadillac Dts Prices Escalade Esv said:

May 22, 2010 11:05 AM
 

E 250 Econoline Clubman Diagram Exhaust Manifold, Sams Club Map said:

May 22, 2010 1:13 PM
 

2000 Toyota Tundra 4x4, 200 Toyota Tundra Fender Flare said:

May 22, 2010 10:41 PM
 

Centurion Industry, 1973 Buick Centurion Engine said:

May 22, 2010 10:58 PM
 

Nissan Maxima Usa, 2008 Nissan Maxima Se For Sale said:

May 23, 2010 1:53 AM
 

1997 Bmw 318is, 318is Package said:

May 23, 2010 3:10 AM
 

1500 Part Datsun B210, Yamaha S210 Ns B210 - 238.computeronlinebingo.com said:

May 23, 2010 9:54 AM
 

Aerio Low Motors, Hid Xenon Suzuki Aerio - 431.1fh.org said:

May 23, 2010 10:41 AM
 

2004 Values Dodge Sprinter 2500, C25 C2500 Pickup Upgrade Yukon Denali Xl - 9.myipgirl.com said:

May 23, 2010 11:15 AM
 

1961 Lincoln Continental Price, Plastic Tanks Transmission Cooler Lincoln Continental Radiator - 113.eumreborn.com said:

May 24, 2010 12:42 PM
 

Toybiz Marvel Legends, 1989 Acura Legend Sale - 374.rkwrh.com said:

May 24, 2010 7:55 PM
 

Ford E 450 Super Duty Socket Explorer Sport Trac, 450slc Parts 1980 Mercedes Benz Fuel Pump - 327.akemet.com said:

May 24, 2010 8:33 PM
 

Samsung C100 Display, C100 Coupon - 393.1fh.org said:

May 24, 2010 10:55 PM
 

G1000 Full, Gmc G1000 Parallel Radiator Glass Cockpit - 442.renters.ws said:

May 25, 2010 12:28 AM
 

Glc Cooling System Priced, Buy Cheap Glc - 307.rkwrh.com said:

May 25, 2010 2:21 AM
 

Granada Bulb Truck, Ford Granada Scorpio Cosworth - 438.jeepsunlimted.com said:

May 25, 2010 3:14 AM
 

Walmart 280ce, 1979 Mercedes 280ce Parts - 453.rkwrh.com said:

May 26, 2010 12:28 AM
 

2001 - 2006 @ Oem Body Parts Chevrolet Monte Carlo, Montego Bay Wendover Coupons - 211.binggreen.com said:

May 31, 2010 1:59 AM
 

1987 - 1991 @ Rodeo Aftermarket Headlights, Clearance Isuzu Rodeo - 445.luna-atra.net said:

May 31, 2010 9:49 AM
 

1987 - 1991 @ P1500 Band, P51 P1500 Van Cooling System Auto Parts - 157.luna-atra.net said:

May 31, 2010 8:42 PM
 

1980 - 2003 @ C1500 Bulb Chevrolet S10, 1996 S10 Mpg - 394.computeronlinebingo.com said:

May 31, 2010 9:47 PM
 

1994 - 1986 @ Astre Exhaust Auto Parts, Astre Warehouse - 208.jeepsunlimted.com said:

May 31, 2010 11:16 PM
Anonymous comments are disabled

This Blog

Post Calendar

<March 2006>
SuMoTuWeThFrSa
2627281234
567891011
12131415161718
19202122232425
2627282930311
2345678

Syndication

Powered by Community Server, by Telligent Systems