2011-01-15 14 views
6

In diesem Codebeispiel:Was ist besser? private static vs privaten

public class SuperMan { 
    private static bool IsProper(decimal x) { 
     return x > 31.0m && x < 45.0m; 
    } 

    public bool CheckStuff(string a, string b, string c) { 
     // lots of code, some of which introduces a variable x 
     return IsProper(x) && /* other conditions */; 
    } 
} 

Should IsProper (..) eine 'private static' oder eine 'private' sein. Unter der Annahme:

  1. IsProper (..) benötigt keine Instanz Zustand zugreifen
  2. Wir sind nicht besorgt über die Leistung unterschiedlich zwischen den beiden Optionen (eines der Dinge, sollten wir nie (auch in Zukunft). sie wird über die Leistung ohne tatsächliche Messung erraten und ohne die Notwendigkeit zu optimieren.)
+3

Könnten zukünftige Versionen von 'IsProper' Zugriff auf die Instanz Zustand? – CodesInChaos

+0

Nein ... Ich werde die Frage bearbeiten, um es klar zu machen. – kidoman

Antwort

4

es könnte statisch sein, da es nicht mit dem SuperMan Klasse noch ihren Mitgliedern nichts zu tun zu haben scheint. Aber Sie sollten sich fragen, ob diese Funktion überhaupt zu dieser Klasse gehört.

Wenn Sie überprüfen, ob Dezimal ist eine richtige Dezimal für SuperMan, dann gehört es dorthin. Aber ich würde es in diesem Fall nicht statisch machen. Wahrscheinlich müssen Sie diese konstanten Werte später durch SuperMan-Eigenschaften ersetzen.

+1

Es ist privat, so kann man nur vermuten, dass es ein Helfer ist. Wenn der gleiche Code an anderer Stelle verwendet wird, gehört er in eine Basisklasse oder Hilfsklasse. – leppie

+0

Es ist eine Hilfsfunktion. – kidoman

+1

Das von Microsoft bereitgestellte Codeanalyse-Tool kennzeichnet dies als unerwünscht; Wenn eine Methode keine Instanzfelder verwendet, sollte sie statisch sein. Ich verstehe nicht, welche Schwierigkeit Sie sehen, wenn Sie es notfalls (eher als vorzeitig) als Beispiel verwenden. – Timwi

0

Statische Methoden können etwas schneller sein, aber auf der anderen Seite kann es manchmal schwieriger sein, sie zu refaktorieren.

+0

Wie so? Können Sie uns ein Beispiel geben? – kidoman

+0

@ KiD0M4N, Raf ist richtig, statisch ist schneller, da es keine Notwendigkeit für die Erstellung von statischen gibt, aber Sie sollten statische Methode auf unveränderliche Objekte oder zustandslose Bedingungen verwenden, um unerwünschte Ergebnisse zu verhindern. –

+0

Wenn Sie ein Objekt erstellen müssen, nur um die Methode aufzurufen, ist das wahr, aber wenn Sie die Instanz bereits haben, ist der Unterschied in der Leistung vernachlässigbar. Es existiert, aber Sie müssen sich darüber keine Sorgen machen, es sei denn, Sie schreiben eine erstklassige 4D-Rendering-Engine. – GolezTrol

2

Gründe eine Instanz Mitglied zu machen IsProper:

  • IsProper eine weitere Implementierung in einer geerbten Klasse benötigt
  • IsProper könnte

Gründe in der Zukunft Zugang zu Mitgliedern eine statische zu machen IsProper Mitglied:

  • Sie haben eine kleine Leistungsstrafe für die Herstellung von i t ein Instanzmitglied.
  • Wenn Sie nur eine Instanz der Klasse erstellen, müssen IsProper zu nennen, würden Sie es machen einen statischen
Verwandte Themen