myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » [erledigt] Methoden überladen vs. Default Values - wo sind die Unterschiede?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

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

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
blutiger_anfänger blutiger_anfänger ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-178.gif


Dabei seit: 26.04.2008
Beiträge: 287
Entwicklungsumgebung: VS 2010
Herkunft: Essen, NRW


blutiger_anfänger ist offline

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

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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:

C#-Code:
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:

C#-Code:
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 09.05.2012 16:03.

09.05.2012 14:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Sarc
myCSharp.de-Mitglied

Dabei seit: 29.09.2008
Beiträge: 288
Entwicklungsumgebung: VS 2012


Sarc ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

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

C#-Code:
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.
09.05.2012 15:06 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
blutiger_anfänger blutiger_anfänger ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-178.gif


Dabei seit: 26.04.2008
Beiträge: 287
Entwicklungsumgebung: VS 2010
Herkunft: Essen, NRW

Themenstarter Thema begonnen von blutiger_anfänger

blutiger_anfänger ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ok, vielen Dank für die schnelle Antwort.

Viele Grüße
09.05.2012 15:14 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
talla talla ist männlich
myCSharp.de-Team (Moderation)

images/avatars/avatar-3214.jpg


Dabei seit: 20.07.2003
Beiträge: 6.863
Entwicklungsumgebung: VS 2010
Herkunft: Esslingen


talla ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
09.05.2012 15:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Team (Admin)

images/avatars/avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 47.496
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
09.05.2012 15:51 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
blutiger_anfänger blutiger_anfänger ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-178.gif


Dabei seit: 26.04.2008
Beiträge: 287
Entwicklungsumgebung: VS 2010
Herkunft: Essen, NRW

Themenstarter Thema begonnen von blutiger_anfänger

blutiger_anfänger ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
09.05.2012 16:02 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Jahr.
Der letzte Beitrag ist älter als ein Jahr.
Antwort erstellen


© Copyright 2003-2013 myCSharp.de-Team. Alle Rechte vorbehalten. 25.05.2013 01:21