Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Artiklar / Titel på artikeln

Datatyper i .net

Postad 2003-04-23 av Mikael Sand i sektionen ASP.NET, C#, Okategoriserat med 0 Kommentarer | Läst av: 6278, Betyg: 66%

Förord

Att hantera datatyper är något som programmeraren inom ”klassisk ASP” anser sig har varit förskonad ifrån eller kanske du är som jag var och ville ha datatyper.
Innehåll
  » Option Strict On
  » Deklaration
  » Numeriska datatyper
  » Datum
  » Andra
  » Referenstyper
  » Tilldelning
  » Initialisering
  » Efterkommande tecken
  » On the fly
  » Multipla deklarationer
  » Alla ärver av object
  » Typomvandling
  » Avslutning
Relaterade artiklar
  » Scope i .NET
Kanske du som jag skrev såhär bara för att vara säker på att saker skulle fungera:


Dim usrID
usrID = Cint(request.Querystring(”usrID”))


Att använda datatyper brukar kallas för ”Strong Typing” på microsoftska. Jag brukar kalla det stabilare kod och ibland också snabbare kod. För att kunna hantera din kod på ett effektivare sätt så vill kompilatorn i .NET gärna veta vilken typ av data den ska hantera variabler som.


Option Strict On

Innan jag försöker gå igenom vad olika datatyper är och innebär så vill jag bara ta upp detta begrepp. Begreppet innebär ungefär att du, när du omvandlar datatyper inte får tappa något innehåll på ett sätt som inte kan kontrolleras.
Om du tar ett decimaltal och vill omvandla det till ett heltal (0,5 till 1) så kommer det att tappa i exakthet. Option Strict säger att det inte är tillåtet rakt av. Du måste tala om för kompilatorn att du faktiskt vill göra just detta.
Jag kommer ta upp mer kring detta senare men jag vill påpeka att all min kod i exempel förutsätter att du har ”slagit på” Option Strict. Det gör du enklast genom att längst upp i din kod skriva ”Option Strict On”. Kompilatorn varnar då innan du gör något dumt.

All kod är dessutom författad i VB.NET och skrivet med ASP.NET i åtanke. All kod är skriven för ”code behind”.


Deklaration

När du deklarerar en variabel i .NET så måste du alltid ange datatyp. Vilken datatyp du väljer beror helt på vad du vill att din variabel ska innehålla.


Dim i As Integer
Dim s As String
Dim o As Object

Efter dessa tre rader har du tre olika variabler som i tur och ordning kan innehålla; heltal, text respektive vad som helst (jämför med Variant du som vet vad det är).

Det som gör att du bör välja en viss datatyp är dess respektive tillgångar och begränsningar. Ju mer komplett datatyp, desto större minnesåtgång och i vissa fall dessutom en upp till tio gånger långsammare kod. För att skilja olika datatyper åt har du dels ett namn men också det som brukar kallas max- och minvärden. Det är helt enkelt de yttre gränserna för respektive datatyp.


Numeriska datatyper

Man kan dela upp dessa typer i två olika undergrupper: heltal och decimaltal (eller flyttal). Det som skiljer dem åt är att den ena klarar inte av decimaltecken och den andra gör det.
Följande heltalstyper står dig till buds.































NamnMinvärdeMaxvärdeStorlek
Byte02551 byte
Short-32768327672 byte
Integer-214748364821474836474 byte
Long-92233+15 92233+158 byte


En liten snabb jämförelse med VB6 är att de tre sista typerna ”hoppat ner” ett snäpp och därigenom är Long numera just väldigt lång.

En kommentar som en annan medlem har givit är "Jag har för mig att man inte ”ska” använda Integer och de andra utan istället int32,int64 som ska vara mera .net", och det stämmer naturligtvis. Det finns en uppsättning alias för alla datatyper inom heltalen eftersom man gärna vill att alla datatyper ska ha samma namn i olika språk. Detta är dock enligt min mening bara att tänka på om du arbetar i ett projekt med en uppblandning av de olika språken i .NET.

Följande flyttalstyper finns:


























NamnMinvärdeMaxvärdeByte
Single-3,402823E+383,402823E+384
Double-1,7976E+3181,7976E+3188
Decimal-792281E+2379228162E+2312


Här handlar det som synes inte så mycket om hur stora eller små talen ska vara utan snarare hur många decimaler du vill ha. Personligen brukar jag hålla mig till double eftersom många uträkningar görs med just detta.


Datum

I .NET finns ännu ingen risk för att Y2K ska upprepas på ett tag. Snarare kan ett Y10K bli ett faktum. Datum heter i .NET DateTime. Tidräkningen börjar den 1/1 år 1 klockan 24 och slutar den siste december 9999 klockan 23:59:59 (pip). En sak som jag lagt märke till är att det inte finns någon typ för enbart tid eller enbart datum. Ett problem man snabbt vänjer sig vid dock.


Andra

Sen följer ett par olika typer som liksom hamnar lite vid sidan av.

Boolean är en datatyp som bara kan innehålla två värden, nämligen sant eller falskt. Trots att man då kanske skulle klara sig med en bit (8 bitar är en byte) i utrymme tar denna datatyp hela 4 bytes.

Char är en datatyp som hanterar bokstäver istället för siffror. Denna synnerligen begränsade datatyp kan bara hålla en enda bokstav.


Referenstyper

De tidigare datatyperna var så kallade ”value types”. Det innebär att de faktiskt rakt upp och ner innehåller det som de säger. Nästa huvudtyp är så kallade ”reference types”. Det innebär att de egentligen bara innehåller en minnesadress till den plats där värdet finns. Till somligas förvåning hör faktiskt string dit och det kan jag hålla med om eftersom den faktiskt beter sig som en value type. Men rätt ska vara rätt.

String är nästa datatyp som jag vill ta upp eftersom den egentligen är lite speciell. Kort och gott kan man säga att den är en datatyp som kan hålla flera bokstäver. Om man är lite sån skulle man kunna säga att det är en array av char. Den stora grejen med String är att den fr o m nu klarar av Unicode, så nu kan du lagra allt möjligt i textform i dina strängvariabler. Runor och kilskrift inkluderat. Datatypen är dock ganska stor; hela 10 byte + 2 * strängens längd. Strängen ”Pellesoft” är med andra ord 28 byte lång.

Sist men inte minst har vi typen object. Denna typ är egentligen bara en liten behållare för den minnesadress som är aktuell för det objekt som den håller. Typen är 4 bytes lång och kan innehålla vad som helst av ovanstående. Naturligtvis blir den då längre eftersom innehållet också måste finnas. Denna typ använder du när du skapar instanser av klasser, som du antingen själv skapat eller som redan finns i .NET Framework.


Tilldelning

Precis som förr så kan du naturligtvis tilldela en variabel ett värde och du gör fortfarande på samma sätt men nu finns det ett par varianter samt några undantag att ha i huvudet.




Initialisering

Förr deklarerade du en variabel och sen tilldelade du den ett värde. I vissa språk var du tvungen att göra det för att det inte skulle krascha. I VB och ASP så hade varje typ ett startvärde (eller defaultvärde). Det finns fortfarande men du kan nu ändra det redan i deklarationen.


Dim i As Integer
i = 10
' Båda fungerar
Dim i As Integer = 10



Efterkommande tecken

Kanske en inte helt lyckad översättning av ”trailing character”. Meningen är dock att ibland så måste du tala om för kompilatorn att ett visst värde är av en viss typ. Detta gör du med typens tillhörande tecken. För de som är lite äldre så kanske de minns att man kunde skriva:


Dim a$

Det påminner lite om det.


' Generar fel
Dim dec As Decimal = 8.9
' Rätt
Dim dec As Decimal = 8.9@


För olika typer finns olika tecken. Eftersom Option Strict är på så kommer kompilatorn att varna långt innan det blir ett problem. Jag hänvisar till hjälpen för andra tecken än det i exemplet.


On the fly

Genom att du kan använda initialisering kan du nu göra tilldelningar på ganska sjuka sätt och därigenom minska antalet rader. Du kan t ex tilldela din variabel resultatet av en funktion:


Dim i As Integer = GetIntValue()

I mer extrema fall kan du tilldela variabeln resultatet av en funktion i en klass som i samtidigt skapas och dör.


Dim d As Double = New MyMoneyTools() _
.GetCurrency(Currency.SEK)



Multipla deklarationer

Om du har programmerat ASP är detta ingen nyhet och det fanns som variant i VB men nu är det fullt utbyggt så att alla programmerare kan känna igen sig. Tänk dig att du ska ha flera variabler av samma typ. Då kan du deklarera dem såhär:


Dim FNamn As String
Dim ENamn As String
Dim PNR As String
Dim UsrId As Integer
Dim Number As Integer

Men numera kan du också skriva såhär:


Dim FNamn, ENamn, PNR As String
Dim UsrId, Number As Integer


Det sparar plats och skapar en mer överskådlig kod.
Nackdelen med de senare är att det inte kan kombineras men initialisering.


Alla ärver av object

Utan att gå för långt in i objektorientering och arv och sånt så kan jag försöka förklara rubriken. I grunden av .NET finns klassbiblioteket System. Under System ligger det mest grundläggande inom programmeringen. Där finns t ex alla datatyper.


Dim i As System.Interger
Dim i As Integer
'Raderna ovan säger samma sak.

I System finns också typen Object, vilken ligger till grund för alla datatyper. Genom det kommer också datatyperna till viss del att behandlas som klasser och alla som sysslat lite med sådan vet att det kan finnas metoder och egenskaper (properties) på klasser. Det finns faktiskt på datatyperna också. Grundläggade metoder kommer från Object men olika datatyper har olika metoder. Låt mig exemplifiera. Skriva följande i din kod:


Dim o As Object
Dim i As Integer

Skriv sedan ”o.” på raden under och då kommer en lita på olika metoder fram. Se till att du hittar metoden ”ToString()”. Skriv därefter ”i.” och återigen får du en liten lista fast med fler metoder. Om du letar lite hittar du ”ToString()” igen. Integer ärver allstå av Object. Du ser också att det finns en hel del andra metoder under Integer, som MinValue eller Parse.

Strukturen i .NET är sådan och det finns inget att säga emot det ovanstående. Frågan kanske bara är vad du ska ha det till, eller hur? Det finns konkreta exempel även om de kanske inte alltid är så bra.


Dim i As Integer = 10
Dim s As String = i.ToString()


Variabeln s har nu värdet “10”.
Ett annat exempel återknyter till det som stod i början.

Dim i As Integer = _
Integer.Parse(Request.QueryString("usrID"))

Variabeln "i" har nu ett värde som inte är en sträng utan ett heltal.

Ett lite bättre exempel för användning är stränghantering, något man aldrig kan få för mycket av.


Dim s As String = "Pellesoft"
s = s.Replace("P", "L")

Lägg märke till att metoden Replace finns på strängvariabeln.

Att använda de metoder som ligger på variablerna passar bättre in med det objektorienterade sätt på vilket .NET är uppbyggt och är en god vana att fortsätta med. Din kod kommer då se mer konsekvent ut och du kommer att ha lättare att läsa andras kod.


Typomvandling

Nackdelen med att använda datatyper är de inte alltid vill stämma överens. Ett klart exempel har redan getts då ett usrID av typer Integer ska hämtas i en querystring som ju är en String. Då måste du typomvandla och dessutom göra det korrekt. På varje datatyp utom String och Object finns metoden Parse, som hjälper dig att omvandla. Det används i exemplet ovan. Det finns dock fler vägar att gå. Dels kan du använda alla gamla VB6 (och script) funktioner som CInt och CDbl men eftersom det inte stämmer med den vana jag tidigare talat om så bör du använda klassen Convert.


UsrId = Convert.ToInt32(Request.QueryString("usrID"))

Denna klass kan omvandla alla ”value types” mellan varandra. Om du vill omvandla till en String så har du det ännu enklare eftersom alla objekt har metoden ToString(). Vad den gör beror på var den anropas men du får alltid tillbaka en sträng.


Avslutning

Detta kanske var en lite väl snabb genomgång av vad datatyper är och vad du ska använda dem till. Det är dock viktigt att påpeka att datatyper är viktigt och att du som programmerare i .NET måste acceptera dem och kunna dem.

Frågor och kommentarer kring artikeln mottages tacksamt via iMail eller mail. Adressen finns på mitt visitkort.
Upp

0 Kommentarer

Skriv en kommentar på artikeln

Ditt betyg på artikeln



Kommentar:





Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 153
27 952
271 704
1 366
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies