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 / Forum översikt / inlägg

Posta nytt inlägg


Vad gör egentligen new?

Postades av 2005-11-16 22:25:15 - Mattias Frisk, i forum vb.net, Tråden har 11 Kommentarer och lästs av 878 personer

Jag har lite problem med att förstå vad New egentligen gör, vad är tex. skillnaden mellan:

Dim i as integer
och
Dim i as New integer

Om jag dimensionerar en class utan New blir det bara en genväg då jag bara kommer åt public shared funktionerna ?. Får inte riktigt rätt på det här :)


Svara

Sv: Vad gör egentligen new?

Postades av 2005-11-16 23:15:50 - Oskar Johansson

Nu måste vi gå lite grundläggande :P

Det finns två sorters "saker" i .Net (och de vanligaste språken, på sätt och vis i alla fall), vo har:
a) Valuetypes, dvs. värdetyper. En värdetyp skickar du runt hur som helst, dvs. skickar du runt ditt värde så kopierar du värdet hela tiden. Ett värde är ett värde; t.ex. är ett nummer ett värde, eller en bokstav, eller en storlekr. Ex:
<code>
Dim x as Värdetyp
Dim y as Värdetyp
x = New Värdetyp() 'Kommer fylla x med "standardvärdetypen"
y = x 'Kommer att kopiera hela x och lägga in kopian i y
'y innehåller nu än kopia av x. Eftersom det är en kopia kommer en ändring i x inte resultera i en ändrig i y
</code>

b) Objects, dvs. Objekt. Ett objekt skickar du inte runt. Du skickar runt en pekare till den (fast det är dolt i t.ex. .NET eller java.) Ex:
<code>
Dim x as Objekttyp
Dim y as Objekttyp
x = New Objekttyp() 'Kommer att fylla x med en pekare på ett helt nyskapat objekt
y = x 'Kommer att kopiera pekaren i x till y.
'Pekaren i x och y pekar på samma sak. En ändring i x kommer resultera i en ändring i y då det är samma objekt
</code>

När det gäller värdetyper så kan vi dela in dem i två läger;
a) "vanliga"

De "vanliga" är enkla värdetyper; t.ex. nummer, en bokstav etc.

b) Strukturer

Strukturer är mer avancerade; de är fortfarande värdetyper <b>men</b> de kan man skapa själva. Man kan sätta samman en struktur med valfritt innehåll. T.ex. kan man skapa en struktur som innehåller ett tal, två bokstäver, ett objekt (obs! pekaren, bara pekaren kommer kopieras, inte objektet bakom) och en storlek (system.drawing.size.) Rubber kommer sedan att kopieras ("skickas runt") när man använder det. Se därför till att hålla den här typen av saker så små som möjligt...

Självklart kan man skicka runt pekare till värdetyper om man vill; antingen som del i unsafe-kod (fungerar bara i c#, inte vb.net) eller som byref (här kan .net ha lite special för sig tydligen, kan inte det där till 100%, fungerar så gör det i alla fall när man använder det) istället för byval.

En värdetyp har alltid ett "defaultvärde", och ett objekt har alltid ett "defaultvärde". Observera att "värdet" i ett objekt är en pekare, en pekare med värdet 0. Alltså pekar den på ingenting. Null alltså.

Om vi tar din enkla kod du hade med integer så är ju det en värdetyp. Oavsett om du använder "new" eller inte så kommer du att ha ett nytt värde på din variabel. Den kommer inte vara "null" (även om nullable types tydligen finns i .net 2.0, har inte utforskat) vilket gör att alla eventuella funktioner kommer att fungera. Observera att det <b>inte</b> gäller "shared" funktioner.

"Shared"-funktioner är inte beroende av en instans; och eftersom att de inte är beroende av en instans så måste de användas utan en instans. En "normal" funktion är däremot beroende av en instans. Ex:
<code>
Dim i as integer
i.ToString() 'Den här funktionen är inte shared, den är beroende av en instans
i.Parse() 'Det här går inte, Parse är en shared funktion
Integer.Parse() 'Det här går eftersom att den inte kallas med en instans av någonting
i = null 'Går inte; null är för pekare. Värdetyper är inte pekare!
</code>

När det gäller objekt är det nästan samma sak:
<code>
Dim x as String
x = "min häst är snäll" 'Skapar i bakgrunden en ny instans av klassen "String" och låter x peka på den
x.ToString() 'Värdelöst anrop :) Men, men, den är beroende av en instans, och det har den
x.Compare() 'Går inte, funktionen är shared, är inte beroende av en instans
String.Compare() 'Det går eftersom att funktionen inte är beroende av en instans
x = null 'Det här går, pekaren sätts till 0 ("null") vilket gör att variabeln inte "innehåller" något objekt längre
x.ToString() 'Går inte! Eftersom att x inte innehåller någonting kommer programmet nu att krascha eftersom att funktionen är beroende av en instans av objektet.
</code>

Observera att det inte går att vid kompileringen se om en variabel innehåller ett objekt eller inte vid en viss rad i programmet, därför kommer endast felmeddelanden om att anropa funktioner som är "shared" på variabler resp. anrop av funktioner som är "normala" på typer (t.ex. string, integer etc.) visas vid kompileringen. Om en variabel av objekttyp är tom vid körning kan dock programmet generera felmeddelanden, det upptäcks som sagt inte vid kompileringen

Kort och gått kommer det alltså inte bli någon skillnad mellan följande rader:
<code>
Dim i as integer
'och
Dim i as New integer
</code>

När det gäller "genvägen" så vet jag inte hur det var i .net 1.* men i .net 2.0 så kompilerar programmet inte ens när man försöker anropa en "sharedmetod" på en variabel istället för en typ. Varför? Se förklaringen ovan i inlägget ;)

Hoppas det rätade ut sig lite :)

[edit]
Ber om ursökt för lite stavfel, orkar dock itne försöka redigera en massa i inlägget när man bara ser några få rader på en gång :)
[/edit]


Svara

Sv:Vad gör egentligen new?

Postades av 2005-11-17 00:11:59 - Mattias Frisk

Oh jävlar!, det var mycket att ta sig igenom :P. Har läst igenom det, förstår dock inte riktigt allting får nog ta o läsa det några gånger till. Tack för hjälpen!


Svara

Sv: Vad gör egentligen new?

Postades av 2005-11-17 14:46:50 - Patrik Löwendahl

värdetyper är structar allihop, varseig microsoft gjort dem och kallat dem int eller du gjort dem själv.

den andra typen kallas referenstyp inte object.


Svara

Sv:Vad gör egentligen new?

Postades av 2005-11-17 16:40:24 - Oskar Johansson

> värdetyper är structar allihop, varseig microsoft gjort dem och kallat dem int eller du gjort dem själv.

Tja, värdetyper kallas det iaf. i alla andra språk. Och både int och en valfri struct man skapat ärver ju ifrån System.ValueType..? Visst; de har metoder, så på sätt och vis är de strukturer de också, men säger man att man har en struktur så syftar man inte på en int. Men säger man att man har en värdetyp så kan man syfta på både en "normal" värdetyp och en struktur.

> den andra typen kallas referenstyp inte object.

Stämmer mycket bra, hade dock inte ordet i huvudet när jag kladda ner texten :)


Svara

Sv: Vad gör egentligen new?

Postades av 2005-11-17 18:46:14 - Patrik Löwendahl

<i>Tja, värdetyper kallas det iaf. i alla andra språk. Och både int och en valfri struct man skapat ärver ju ifrån System.ValueType..? Visst; de har metoder, så på sätt och vis är de strukturer de också, men säger man att man har en struktur så syftar man inte på en int. Men säger man att man har en värdetyp så kan man syfta på både en "normal" värdetyp och en struktur.</i>

Nej. Struct är konstrukten för att skapa värdetyper, på samma vis som Klass är konstrukten för att skapa referenstyper. Om du tar 2 sekunder och kollar upp din fakta så kommer du se att även int/datetime mm är definerade som struct i ramverket.

Det här skiljer sig inte i "andra språk" heller.

Vad gäller terminologin så kan du inte jämföra att prata om en faktiskt implementation (int) och det abstrakta begreppet man använder för att skapa den faktiska implementationen (struct).

Läs en bok.


Svara

Sv:Vad gör egentligen new?

Postades av 2005-11-17 22:09:28 - Oskar Johansson

Tja; lite google:
http://blogs.msdn.com/ericgu/archive/2004/03/24/95736.aspx (Eric Gunnerson)

>>
We went through a few ideas. One was to have a contraint named “reference-type” and “value-type”, but that seemed to be a very verbose statement, and not really in the spirit of the C# naming. We went through a few sillier options (which have thankfully slipped my mind), and finally settled on our original choice, “class” and “struct”.

Those names aren't perfect, because of what they really mean is “reference type” or “value type”.
<<

http://www.dotnet247.com/247reference/a.aspx?u=http://www.csharp-station.com/Articles/ObjectClass.aspx

http://www.dotnet247.com/247reference/msgs/58/293146.aspx

>>
As another interesting side note, the value types themselves don't
inherit from System.ValueType, either. Instead, their corresponding
boxed types inherit from ValueType, and they don't inherit from
anything.
<<

http://www.jaggersoft.com/csharp_standard/10.4.2.htm

Ja, jag har kollat upp (gjorde det redan förut) hur int är skrivet i .net framework. Saken är att jag inte är beredd att kalla t.ex. int för en struct (även fast det är det i ramverket på sätt och vis) utan en värdetyp; när man pratar om en struktur så syftar man helt enkelt inte på t.ex. en int. Man syftar på någonting lite mer invecklat som t.ex. datetime eller message. Av den enkla anledningen särar jag på begreppen "enkla värdetyper" och strukturer.


Svara

Sv: Vad gör egentligen new?

Postades av 2005-11-18 13:16:54 - Patrik Löwendahl

Jag förstår inte riktigt? Dina länkar säger precis samma saker som jag gör?

<i>Those names aren't perfect, because of what they really mean is “reference type” or “value type"</i>

Vad Eric säger är att de är samma sak (och det här jag dessutom hört honom säga och disskuterat med honom, inte bara läst och själv tolkat), inte att en viss implementation är annorlunda eller olika saker. Att du väljer att använda felaktig terminologi ur ett programspråksperspektiv får stå för dig men faktum kvarsstår. Värdetyper defineras som struct, en strukt kallas värdetyp.


Svara

Sv:Vad gör egentligen new?

Postades av 2005-11-18 14:58:45 - Oskar Johansson

> Vad Eric säger är att de är samma sak (och det här jag dessutom hört honom säga och disskuterat med honom, inte bara läst och själv tolkat), inte att en viss implementation är annorlunda eller olika saker. Att du väljer att använda felaktig terminologi ur ett programspråksperspektiv får stå för dig men faktum kvarsstår. Värdetyper defineras som struct, en strukt kallas värdetyp.

Jag tolkar följande:
<i>Those names aren't perfect, because of what they really mean is “reference type” or “value type"</i>
som:
Referenstyp kallas Object
Värdetyp kallas Struct <b>rent kodmässigt</b>

Förstår inte problemet...


Svara

Sv: Vad gör egentligen new?

Postades av 2005-11-18 15:07:53 - Patrik Löwendahl

Svårt att få en döv att höra märker jag...


Svara

Sv:Vad gör egentligen new?

Postades av 2005-11-18 21:28:48 - Andreas Håkansson

och i IL är det juh ändå klasser allt samman =)


Svara

Sv: Vad gör egentligen new?

Postades av 2005-11-19 00:18:32 - Oskar Johansson

> och i IL är det juh ändå klasser allt samman =)

Jo, på den nivån är ju enda skillnaden vad de ärver :)


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

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 570 725
27 958
271 751
449
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