Avatar billede eskeeske Nybegynder
28. juni 2003 - 02:40 Der er 8 kommentarer og
3 løsninger

int og Integer

Hvordan er det det er med int og Integer og er der ikke også noget der hedder Int med stort I (eller er det bare mig der er forviret).

det virker somon at int ikke kan være lig null?

Har String også to måder den kan være på, hvor den ene ikke kan være lig null ?
Avatar billede eskeeske Nybegynder
28. juni 2003 - 02:41 #1
Og hvilke fordele har det at bruge de korte typer udover performance og at int er hurtigere at skrive til end Integer.
Avatar billede tjp Mester
28. juni 2003 - 04:17 #2
Jeg kender ikke lige præcis C#, men normalt i C-varianter plejer int at være en simpel datatype som kan bruges umiddelbart, hvorimod Integer er en klasse som der skal oprettes objekter af. Derfor er en Integer variabel en pointer som er lig null indtil du opretter og tildeler den et objekt.

Sagt på en anden måde: en int variabel indeholder en talværdi, hvorimod en Integer indeholder enten adressen på et objekt som rummer en talværdi eller også null. (ok, den kan faktisk stå og pege på en tilfældigt adresse - derfor er det god skik at null'e den fra start!)

String findes normal ikke som simpel datatype...
Avatar billede tjp Mester
28. juni 2003 - 04:21 #3
Fordelen er, udover det du nævner, at man slipper for al objekts-hurlumhejet, når man fx lige kun har brug for en tæller ;-)
Avatar billede sekhmet_ds Nybegynder
28. juni 2003 - 08:48 #4
Det er ikke helt tilfældet i .NET.

String og Integer er klasser i .NET frameworket, og int og string er C# typer der mapper over på Integer og String.

Eftersom C# er et .NET skal det jo benytte de indbyggede klasser i C#, men derfor kan den godt være smart. På samme måde som properties, af compileren, bliver oversat til metoder så bliver int og string oversat til Integer og String henholdsvis.
Avatar billede sekhmet_ds Nybegynder
28. juni 2003 - 08:49 #5
"Eftersom C# er et .NET skal det jo benytte de indbyggede klasser i C#,"

Skulle selvf være:
"Eftersom C# er et .NET skal det jo benytte de indbyggede klasser i .NET,"
Avatar billede odegaard Nybegynder
28. juni 2003 - 09:04 #6
Hvad så med Int16, Int32 og Int64 ?
Avatar billede sekhmet_ds Nybegynder
28. juni 2003 - 13:03 #7
Er bange for at jeg fik sagt noget forkert før. int i C# mappes ikke til en Integer i .NET frameworket. int er Int32 og således bliver short til Int16 og long til Int64.

Umiddelbart kan jeg ikke finde Integer klassen i .NET frameworket, er du sikker på du ikke forveksler det med en int i VB.NET? Her benyttes Integer til at betegne en Int32 (gætter på det er Int32).

Det vigtige at forstå her er at typer som int, long, short og string (alle dem der markeres med blåt i VS.NET :)) ikke findes i virkeligheden (groft sagt). Det der sker er at C# compileren ser at der står int og så indsætter den i stedet System.Int32.
Så hvis du compiler (C#): int i = 0;
Og (VB.NET): Dim i as Integer
            i = 0
Så skulle du i teorien få det samme MSIL (det sprog .NET der kommer ud når man compiler) kode ud. Det er dog kun i teorien da det kommer an på compileren.
Avatar billede Slettet bruger
28. juni 2003 - 13:08 #8
Jeg giver lige mit uforbeholdne (og sikkert ikke særligt kvalificerede svar eftersom jeg er et Java-menneske, men ok.....here goes....)

int er en primitiv datatype, og er derfor hurtigere at tilgå....
Integer lyder til at være en klasse, til at "wrappe" int-datatypen (således denne bliver "Objekt-Orienteret") - et objekt tager "tid" at få instansieret, og er mere ressourcekrævende, derfor bør man benytte int, hvor det er muligt.... (Du mærker nu nok alligevel ikke noget performance-loss på en nyere maskine, men WHATEVER..... )

Håber at det kunne bruges til noget :-&
Avatar billede Slettet bruger
28. juni 2003 - 13:09 #9
en int kan ikke være NULL eftersom der ikke er en reference til en sådan

en NULL-reference kan kun opnåes hvis man henviser til et objekt som ikke er instansieret.....
Avatar billede eskeeske Nybegynder
28. juni 2003 - 16:14 #10
Jeg blev da lidt klogere.
Avatar billede burningice Nybegynder
12. august 2003 - 21:43 #11
jeg ved godt det er lidt sent, og jeg har umiddelbart ikke noget at tilføje, bortset fra at forklaringerne der her er kommet har været lidt rodede.

Det er rigtigt, at int, string, decimal m.fl. er c#-keywords som henviser til de respektive klasser/structs (Int32, String, Decimal). Bemærk, at Int32 IKKE er en klasse, men en STRUCT !!


Grunden til at man ikke kan skrive

int i = null

er at det kun er referencetypes (typer der arver fra Object) som kan have en null-reference, og i og med at Int32 er en struct (arver fra ValueType), er det ikke en referencetype og kan derfor heller ikke have en null-reference.

String til gengæld er en referencetype, den arver fra object (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemstringclasssplittopic.asp), og man kan derfor sætte den til at være null (variabel peger altså på ingenting).
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