Avatar billede Spotgun Seniormester
28. juli 2005 - 14:24 Der er 8 kommentarer og
1 løsning

Constructor overloading?

Normalt hvis jeg skal bruge overloadede constructors plejer jeg at lave dem således:

    public class Settings
    {
        string fileName;
        string rootName;

        public Settings(string fileName, string rootName)
        {
            this.fileName = fileName;
            this.rootName = rootName;
        }

        public Settings(string fileName)
        {   
            Settings(fileName, "Settings")
        }

        public Settings()
        {   
            Settings("default.xml", "Settings")
        }
    }

Men nu er jeg stødt på et par eksempler hvor de er lavet således:

        public Settings(string fileName) : this(fileName, "Settings")
        {   
        }

For mig at se giver det samme resultat, men er der nogen forskel på de to fremgangsmåder, og i så fald, hvad er "best practice"?
Avatar billede spif2001 Nybegynder
28. juli 2005 - 14:30 #1
Den var ny for mig, men er det nu også rigtigt at det er en overload. Er det ikke nærmere følgende:

public Settings(string fileName) : this(fileName, "Settings")

}

Hvis du bruger denne, så kaldes din constructor

public Settings(string fileName, string rootName)
        {
            this.fileName = fileName;
            this.rootName = rootName;
        }

før den går ind i koden på den kaldte constructor.
Avatar billede arne_v Ekspert
28. juli 2005 - 14:30 #2
Jeg troede kun at det var den sidste som var valid C# !!
Avatar billede spif2001 Nybegynder
28. juli 2005 - 14:31 #3
Hvis du gør følgende:

public Settings(string fileName) : base()
{
}

betyder det jo at den kalder superklassens constructor før den kalder din constructor
Avatar billede spif2001 Nybegynder
28. juli 2005 - 14:37 #4
using System;

namespace HejProg
{
    public class Class1
    {
        public string hej;
        public string medDig;

        public Class1()
        {
            this.medDig = "hejsa";
        }

        public Class1(string h): this()
        {
            this.hej = h;
        }
    }
}

hvis du udefra laver en Class1 kan man gøre følgende:

Class1 one = new Class1();

så bliver hej aldrig sat, men kalder du den anden:

Class1 one = new Class1("davs");

bliver hej sat.

Altså ikke overloading, du kalder bare en constructør
Avatar billede spif2001 Nybegynder
28. juli 2005 - 14:39 #5
Class1 one = new Class1("davs");

sætter selvfølgelig også medDig - fik det ikke lige med
Avatar billede Spotgun Seniormester
28. juli 2005 - 14:44 #6
Tror jeg har fået fat i det nu... Og jeg fik vist også skrevet lidt forkert info i starten, men jeg er blevet lidt klogere! :)

Smider du et svar spif?
Avatar billede spif2001 Nybegynder
28. juli 2005 - 14:46 #7
svar :)
Avatar billede Spotgun Seniormester
28. juli 2005 - 14:47 #8
Tak for hjælpen!

Tror vist hellere jeg snart må få lidt frisk luft, for at få gang i hjernen igen... :D
Avatar billede spif2001 Nybegynder
28. juli 2005 - 14:49 #9
hæhæ - sidder også hele dagen foran skærmen, men heldigvis er jeg ryger på en ikke-rygende arbejdsplads hvor man skal gå udenfor og ryge - det klarer lige hjernen
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