2017-02-05 2 views
-1

Ich habe eine Hilfsklasse, die ein Objekt nimmt, verarbeitet es und gibt eine Instanz der anderen Klasse oder sogar die Liste der Objekte zurück. Was wäre der beste Weg: diese Hilfsmethode statisch oder nicht-statisch zu machen? Die Sache ist, dass meine App viele der Auto-Objekte erstellen kann und ich dachte, ob es einen negativen Effekt haben könnte, wenn jeder von ihnen den statischen Helfer benutzt?Verwenden von statischen Methoden in der Hilfsklasse vs nicht statische

+0

Haben Sie einige Beispielcode als helfen, die am besten geeignete Antwort auf Ihre Frage –

+1

@ J.Doe Yup zu geben. Ihr Auto könnte einen platten Reifen haben. Witze auseinander, können Sie uns bitte etwas Code zeigen. – CKing

+0

Müssen Sie beim Testen Ihrer Klasse einige Funktionen ausprobieren (das Original, nicht die Helferklasse)? In diesem Fall sollten Sie keine statischen Methoden verwenden. –

Antwort

1

Die meisten Hilfs- oder Hilfsklassen verwenden statische Methoden. Sie sollten nur nicht statische Methoden verwenden, wenn Sie mehrere Instanzen Ihrer Hilfsklasse erstellen möchten, aber da Sie nur eine einfache Eingabe -> Funktion -> Ausgabe benötigen, würde ich die Methoden statisch machen.

+0

Das ist falsch. Sie sollten statische Klassen/Methoden nur verwenden, wenn es einen guten Grund dafür gibt, dass sie statisch sind und nicht umgekehrt. –

+1

@shay__ als wäre es eine Hilfsmethode, die sich nicht auf einen Zustand bezieht oder überschrieben werden muss? –

+0

@shay__ Hilfsklassen sind normalerweise statisch. das Instanziieren eines Objekts für ein einzelnes nicht verwandtes Verfahren ist redundant. Sein Vorschlag ist nicht falsch, Sie haben ihn falsch verstanden. – Stavm

1

Wahrscheinlich ist dies etwas, das gelöst werden kann, ohne den Lebenszyklus des Hilfsobjekts zu bestimmen, wo Sie es benötigen.

Sie sollten versuchen, Dependency Injection Ansatz zu nutzen:

public class X 
{ 
    public X(IHelper helper) 
    { 
     Helper = helper; 
    } 

    private IHelper Helper { get; } 

    public void DoStuff() 
    { 
     var result = Helper.DoOtherStuff(input); 
    } 
} 

Das heißt, X nicht wissen, ob Helfer immer die gleiche Instanz ist oder wenn es ein vorübergehendes Objekt. Dies macht den Code sauberer und testfreundlicher, weil Sie den Helfer mit einer falschen IHelper Implementierung verspotten können, um sicher zu sein, dass Sie nur X testen.

+1

Ich würde den Typ auf "IHelper" in Ihrem Beispiel ändern, um zu betonen, dass es keine Kopplung zwischen 'X' und seinem Helfer gibt –

+0

@shay__ Ich dachte darüber nach ... Ich kann es ändern, kein Problem .. –

0

Verwenden Sie statische Klasse mit statischen Methoden, keine Instanz, keine Ableitung und nur statische Methoden in der Klasse.

public static class HelperClass 
{ 
    public static void HelperMethod() 
    { 
     // do something 
    } 
} 
Verwandte Themen