Frage

Ich baue einen Wrapper für eine jQuery-Plugin zu C # und ich nicht wie die Verwendung von [Optional], weil es nicht als „optional“, wie sie sagt, es ist (das heißt, Sie immer noch, dass System.Missing Bibliothek erklären müssen) so entschied ich mich überladene Methoden zu verwenden. Ich möchte dem Benutzer eine Menge Anpassung geben, aber ich bin nicht sicher, wie explizite ich mit meiner Überlastungen sein sollte. Soll ich es breche für die Parameter in Bezug auf die Bedeutung oder für jedes Szenario eine Überlastung tun.

  • Was ist der Fußdruck auf Überlastungen?
  • Ist es in Effizienz verringern?
  • Ist runzelte die Stirn es in Bezug auf die OOP auf?

  • PS Ich bin eine Basisklasse Konstruktor aufrufen und mit base(param1, param2, ...) Methode verwenden, aber ich würde auch this(param1, param2, ...) mögen anstatt verwenden, um meine Membervariablen in jedem Szenario zu initialisieren, ist es eine Möglichkeit, um dieses?

    War es hilfreich?

    Lösung

    Eine verwirrende API ist der ewige Fluch der Bibliothek Verbraucher. Machen Sie es einfach, auch trivial, für Menschen, genau entscheiden, was sie die Schnittstelle, die Sie zur Verfügung stellen tun gegeben werden sollen. Wenn sie aus einer langen Liste von überladenen Funktionen wählen müssen, das ist wahrscheinlich zu viel kognitive Aufwand. Außerdem ist es erwähnenswert, dass C # 4 Unterstützung für optionale und benannte Parameter hat, so dass Ihr System.Missing Problem von selbst weggehen wird.

      

    Ist es verpönt in Bezug auf OOP?

    OOP begünstigt die Einzel Prinzip Verantwortung oder SRP. Wenn Sie eine einzelne Klasse mit vielen dieser Funktionen haben, die jeweils viele Überlastungen haben, das deutet darauf hin, dass es zu viel tun kann.

      

    Ist es in Effizienz verringern?

    Wenn Sie eine Menge von Überlastungen für die gleiche Methode haben, dauert es länger, bis statisch löst jeden Funktionsaufruf (das heißt „die Methode mit diesem Namen ist die richtige?“). Aber das wird nicht haben eine Laufzeit Auswirkungen auf die Leistung, wenn sie nicht virtuelle Anrufe sind - das heißt, wo der Compiler statisch genau wissen kann, welche Art etwas sein wird. So oder so, aber ich glaube nicht, dass sollte hier Ihr Motivationsfaktor sein.

    Andere Tipps

    Wenn Sie eine Menge von Parametern und sein müssen erweiterbar betrachten eine Klasse verwenden, die Ihre Parameter enthält.

    z.

    public class FileOptions
    {
      public bool Indented { get; set; }
      public string Namespace { get; set; }
      public System.Text.Encoding Encoding { get; set; }
    }
    
    public void Save(string fileName, FileOptions options) { ... }
    
    // usage:
    
    obj.Save("a.xml", new FileOptions { Indented=true });
    obj.Save("b.xml", new FileOptions { Namespace="urn:foo", Encoding=System.Text.Encoding.UTF8 });
    
    Lizenziert unter: CC-BY-SA mit Zuschreibung
    Nicht verbunden mit StackOverflow
    scroll top