Avatar billede odegaard Nybegynder
13. september 2001 - 16:54 Der er 6 kommentarer

VB.NET vs. C#.NET (diskution)

Hvad taler for VB og hvad taler for C# i .NET sammenhænge ?
Hvad foretrækker du?  ...og hvorfor?

/Odegaard
Avatar billede madsdamgaard Nybegynder
13. september 2001 - 19:32 #1
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

/Damgård
Avatar billede moykal Nybegynder
14. september 2001 - 11:10 #2
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:

http://www.eksperten.dk/spm/94769

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.
Avatar billede reffak Nybegynder
16. september 2001 - 01:41 #3
I C# kan jeg heller ikke finde en mulighed for at lave en optional parameter til en funktion...hvilket dog findes i VB.NET, f.eks:

Public Sub mySub(Optional ByVal myPar As Integer)

Er der nogen der ved om C# har et sidestykke til denne optional parameter?
MVH
Avatar billede odegaard Nybegynder
16. september 2001 - 02:02 #4
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>
Avatar billede prh Nybegynder
25. januar 2002 - 00:56 #5
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) :

string myString = mySqlReader.IsDBNull(0) ? "" : mySQLReader.GetString(0);

i vb skulle det være noget ala :

Dim myString as string

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 :)

Mvh Svøllen
Avatar billede even.dk Nybegynder
04. november 2002 - 10:21 #6
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#!!!
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester