C#: die Rückkehr 'diese' Methode für die Verschachtelung?

Habe ich eine Klasse, die habe ich zu nennen ein oder zwei Methoden, eine Menge von Zeiten nach einander. Die Methoden derzeit zurück void. Ich dachte, es wäre besser, es zu haben zurück this, so dass die Methoden auch Ineinander verschachtelt werden? oder ist das berücksichtigen sehr sehr sehr schlecht? oder wenn schlecht, wäre es besser, wenn es wieder ein neues Objekt des gleichen Typs? Oder was denkst du? Als Beispiel habe ich drei Versionen eines adder-Klasse:

//Regular
class Adder
{
    public Adder() { Number = 0; }

    public int Number { get; private set; }

    public void Add(int i) { Number += i; }
    public void Remove(int i) { Number -= i; }
}

//Returning this
class Adder
{
    public Adder() { Number = 0; }

    public int Number { get; private set; }

    public Adder Add(int i) { Number += i; return this; }
    public Adder Remove(int i) { Number -= i; return this; }
}

//Returning new
class Adder
{
    public Adder() : this(0) { }
    private Adder(int i) { Number = i; }

    public int Number { get; private set; }

    public Adder Add(int i) { return new Adder(Number + i); }
    public Adder Remove(int i) { return new Adder(Number - i); }
}

Der erste kann verwendet werden, auf diese Weise:

    var a = new Adder();
    a.Add(4);
    a.Remove(1);
    a.Add(7);
    a.Remove(3);

Die anderen beiden können so genutzt werden:

    var a = new Adder()
        .Add(4)
        .Remove(1)
        .Add(7)
        .Remove(3);

Denen der einzige Unterschied ist, dass a im ersten Fall ist die new Adder() während in der zweiten es ist das Ergebnis der letzten Methode.

Den ersten finde ich, dass schnell geworden... ärgerlich, zu schreiben, immer und immer wieder. So möchte ich verwenden Sie eine der anderen Versionen.

Dritten arbeitet der Art wie viele andere Methoden, wie viele String-Methoden und erweiterungsmethoden für IEnumerable. Ich denke, das hat seine positive Seite, dass Sie Dinge tun kann, wie var a = new Adder(); var b = a.Add(5); und haben dann eine, die war 0 und wurde 5. Aber zur gleichen Zeit, ist es nicht ein bisschen teuer um neue Objekte zu erzeugen, die ganze Zeit? Und Wann wird das erste Objekt sterben? Bei der ersten Methode gibt Art? Oder?

Anyways, ich mag die gibt this und denke, ich werde es benutzen, aber ich bin sehr neugierig zu wissen, was andere denken über diesen Fall. Und das, was als beste Praxis.

  • Du bist Dritte Klasse nicht tun, was Sie sagte, es tut. Sie möchte hinzufügen, oder subtrahieren Sie von der Nummer und pass in new Adder(...) als separate integer.
  • oh, guter Fang! danke =)
InformationsquelleAutor Svish | 2009-04-23
Schreibe einen Kommentar