Avatar billede mach3 Nybegynder
12. januar 2005 - 03:18 Der er 13 kommentarer og
2 løsninger

string: skal de initialiseres?

Hej,

Er det det samme når man opretter en string at skrive:

string strTest;
string strTest = "";

Eller er der bestemte situationer, hvor den ene er at foretrække?

Med venlig hilsen
Avatar billede moocher Nybegynder
12. januar 2005 - 06:30 #1
Jeg vil mene at strTest indeholder det samme i dine eksempler, men for en sikkerhedsskyld kan du jo bare satrte med den sidste af dem
Avatar billede arne_v Ekspert
12. januar 2005 - 07:13 #2
Nej det er ikke det samme.

Den første vil give dig:
  error CS0165: Use of unassigned local variable 's1'
hvis den er lokal og vil have værdien null og ikke værdien "" hvis den ikke
er lokal.
Avatar billede burningice Nybegynder
12. januar 2005 - 13:37 #3
string er ikke en simpel type, og får derfor ikke automatisk værdien 0, hvis den ikke bliver assigned til noget, som f.eks. int gør.
Avatar billede repsak Nybegynder
12. januar 2005 - 15:18 #4
cyberfessor ->

int i; //i er ikke 0
i=0; //først nu er i=0
Avatar billede arne_v Ekspert
12. januar 2005 - 15:29 #5
using System;

namespace E1
{
    class MainClass
    {
        private static int i1;
        public static void Main(string[] args)
        {
            int i2 = 0; // <---- giver compile fejl uden initialisering
            Console.WriteLine(i1+ " " + i2);
        }
    }
}
Avatar billede burningice Nybegynder
12. januar 2005 - 15:46 #6
static void Main(string[] args)
        {
            int i = new Int32();
                        Console.WriteLine(i);

            Console.ReadLine();
        }

vil give dig 0, så... jo.

det er rigtigt at compileren ikke tillader dig at skrive

static void Main(string[] args)
        {
            int i;
                        Console.WriteLine(i);

            Console.ReadLine();
        }

men det er ikke fordi at i ikke indeholder noget, det er bare compileren der godt kan se at i aldrig bliver sat til noget, og derfor bliver den slet ikke taget med. Det er det samme med følgende

static void Main(string[] args)
        {
            int i = 12;

            Console.ReadLine();
        }

hvis du compiler den og kigger i IL-koden vil du se at variablen aldrig bliver oprettet.

IL-koden for de to første kodeeksempler er forresten NØJAGTIG den samme. Altså kan vi konkludere at en int default vil blive sat til 0, også selvom man ikke tildelder den en værdi.
Avatar billede repsak Nybegynder
12. januar 2005 - 18:13 #7
ærgeligt at man er underlagt compileren hehe
Avatar billede arne_v Ekspert
12. januar 2005 - 20:35 #8
cf>

Jeg ved ikke helt hvad du mener at:

int i = new Int32();

viser.

At struct Int32 har en constructor som eksplicit sætter værdien til 0 eller ... ?

Og hvad mener du med "IL-koden for de to første kodeeksempler er
forresten NØJAGTIG den samme" ?`

Det andet eksempel compiler ikke. Hvordan kan IL koden for det første være
identisk med den ikke eksisterende IL kode fra den anden ?
Avatar billede burningice Nybegynder
12. januar 2005 - 20:58 #9
arne_v>> sorry... det er int i = new Int32(); og int i = 0 der giver det samme output i IL.

I følge MSDN, har alle valuetypes en implicit constructor der sætter dens værdi til
default. (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vcrefvaluetypes.asp)

Each value type has an implicit default constructor that initializes the default value of that type.

Disse default-værdier kan ses på denne side: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vcrefdefaultconstructors.asp

Så ja, constructor'en til int sætter dens værdi til 0. I mit eksempel måtte jeg kalde den explicit da compileren ellers brokker sig. Men du kom med et fint eksempel hvor dens constructor bliver kaldet implicit.
Avatar billede arne_v Ekspert
12. januar 2005 - 21:03 #10
Så forstår jeg bedre.

Jeg kan iøvrigt fortælle at Java har præcis samme konvention. Instans og klasse
variable får værdi 0/null. Lokale variable giver compiler fejl.
Avatar billede mach3 Nybegynder
13. januar 2005 - 23:55 #11
Jeg har fået svar for alle pengene. Kom med nogle svar :-)
Avatar billede arne_v Ekspert
13. januar 2005 - 23:56 #12
ok
Avatar billede burningice Nybegynder
14. januar 2005 - 00:18 #13
:) svar
Avatar billede arne_v Ekspert
25. februar 2005 - 22:29 #14
....
Avatar billede mach3 Nybegynder
25. februar 2005 - 22:50 #15
takker
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