Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

[erledigt] Methoden überladen vs. Default Values - wo sind die Unterschiede?
blutiger_anfänger
myCSharp.de - Member



Dabei seit:
Beiträge: 293
Herkunft: Meerbusch, NRW

Themenstarter:

[erledigt] Methoden überladen vs. Default Values - wo sind die Unterschiede?

beantworten | zitieren | melden

Hallo,

ich habe eine Verständnisfrage. Ich bin letztens über Default Values in Konstruktoren gestolpert und Frage mich jetzt, wo der Unterschied zwischen der Variante mit Überladungen:


class Test
    {
        private int _a;
        public int A { get { return _a; } set { _a = value; } }

        public Test()
        {
            this._a = 0;
        }

        public Test(int a)
        {
            this._a = a;
        }
    }

und der Variante mit Default Value:


class Test
    {
        private int _a;
        public int A { get { return _a; } set { _a = value; } }


        public Test(int a = 0)
        {
            this._a = a;
        }
    }
ist?

Gibt es dort Unterschiede im Verhalten, die ich beachten muss? Oder stehen beide Varianten vom Verhalten her analog zueinander? Wenn ja, dann wäre ja die Variante mit Default Value aufgrund ihrer Länge zu bevorzugen.

Viele Grüße,
Raffi
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von blutiger_anfänger am .
Wenn ich nicht hier bin, findest du mich auf code-bude.net.
private Nachricht | Beiträge des Benutzers
Sarc
myCSharp.de - Member



Dabei seit:
Beiträge: 417

beantworten | zitieren | melden

Hallo,

eigentlich müsstest du dich in der 1. Variante auf den anderen Konstruktor stützen, um Redundanzen zu vermeiden:

public Test()
 : this(0)
{}

public Test(int a)
{
	this._a = a;
}
Bei der Default-Value Variante kommt hinzu, dass dem Aufrufer bekannt gemacht wird, was genau der Default-Wert ist, falls explizit keiner angebeben wird.
private Nachricht | Beiträge des Benutzers
blutiger_anfänger
myCSharp.de - Member



Dabei seit:
Beiträge: 293
Herkunft: Meerbusch, NRW

Themenstarter:

beantworten | zitieren | melden

Ok, vielen Dank für die schnelle Antwort.

Viele Grüße
Wenn ich nicht hier bin, findest du mich auf code-bude.net.
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 6.862
Herkunft: Esslingen

beantworten | zitieren | melden

Hallo,
Zitat
Oder stehen beide Varianten vom Verhalten her analog zueinander?

Wenn du nur den Konstruktor mit einem Argument benutzt, sind sie relativ gleich, im zweiten Fall gibts aber keinen Standardkonstruktor und das ist nen riesen Unterschied zum ersten Fall.

Man muss auch auf das Laufzeitverhalten aufpassen. Defaultwerte werden bei der Kompilierung reinkompiliert. Wenn man Assembly A hat mit z.B. deinen Konstruktor und Assembly B wo ihn benutzt, dann kompiliert man A mit z.B. 0 als Defaultwert, kompiliert B, ändert den Wert auf A in 5 und wenn man jetzt das Programm ausführt, fällt man auf die Nase, da B immer noch von 0 ausgeht, und nicht von dem aktuellen Wert.
Baka wa shinanakya naoranai.

Mein XING Profil.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo blutiger_anfänger,

neulich hatten wir eine recht ähnliche Frage: Konstruktorredundanz in Ordnung?

Früher gab es Default Parameter gar nicht, und das aus gutem Grund, siehe Default Werte für Parameter.

Generell ist die landläufige Meinung, dass man mit Überladungen auf der sicheren Seite und gleichzeitig flexibler ist, um den Preis von etwas mehr Code.

Das wurde schon mehrfach im Forum besprochen. Über die Suche findest du entsprechende Threads, z.B. The Future of C# (C# 4.0).

Zudem ist die ganze Frage schon ziemlich nah an [Hinweis] Wie poste ich richtig? Punkt 1.1.1.


herbivore
private Nachricht | Beiträge des Benutzers
blutiger_anfänger
myCSharp.de - Member



Dabei seit:
Beiträge: 293
Herkunft: Meerbusch, NRW

Themenstarter:

beantworten | zitieren | melden

Hallo herbivore,

auch noch mal Danke für deine Antwort. Was das richtige Posten angeht, habe ich anscheinend die falschen Begriffe in die Suche gehauen. Das tut mir leid.

Viele Grüße
Wenn ich nicht hier bin, findest du mich auf code-bude.net.
private Nachricht | Beiträge des Benutzers