2009-07-22 3 views

Antwort

20

Wie David sagt: Sie machen das Gleiche. Intern wird beim Aufruf von Environment.CurrentDirectoryDirectory.GetCurrentDirectory aufgerufen und bei Einstellung Environment.CurrentDirectory wird Directory.SetCurrentDirectory aufgerufen.

Wählen Sie einfach einen Favoriten und gehen Sie mit ihm.

2

Nein, es gibt keine weiteren Unterschiede.

22

Wie schon aus anderen Antworten, gibt es keinen Unterschied - die implemenetation von Environment.CurrentDirectory Delegierten die Get und Set Methoden in Directory.

Es ist eine interessante stilistische API-Design Frage, dass das wirft - warum haben die Designer von Environment das Gefühl, dass eine regelmäßige Eigenschaft angemessen war, während die Designer von Directory explizit bevorzugt Get und Set Methoden?

Das Framework Design Guidelines Buch hat eine Menge zu sagen über die Auswahl von Eigenschaften im Vergleich zu Methoden, von denen einige available online ist. Die wichtigsten Teile scheinen mir zu sein (meine Hervorhebungen mit):

Die Faustregel ist, dass Methoden sollten repräsentieren Aktionen und Eigenschaften sollten Daten darstellen. Eigenschaften sind über Methoden bevorzugt wenn alles andere gleich ist

...

  • BERÜCKSICHTIGEN eine Eigenschaft verwenden, wenn das Mitglied ein logisches Attribut stellt des Typs

...

  • DO eine Methode, sondern als eine Eigenschaft, in den folgenden Situationen:
    • Der Betrieb ist um Größenordnungen langsamer als ein Feld Zugang

Alle Dinge würden in Betracht gezogen meine meinung ist das explizite Get und Setmethoden besser darstellen, was hier vor sich geht.

+0

+1 Ich stimme nicht oft in Q & A's, in denen ich auch poste, aber die Framework Design Guidelines sind eine Aufzählung wert stimme auch mit Ihrer Schlussfolgerung überein –

+1

Ich denke, es ist mehr ein logischer Unterschied, der die Ursache ist von diesem. Es ist eine natürliche Eigenschaft im Kontext Umwelt, aber im Verzeichnis ist es eher eine "verzeichnisbezogene" Dienstprogrammfunktion. – awe

+1

Die Konsistenz mit dem Rest der Klasse war wahrscheinlich auch ein Faktor. Zurück in Version 1.1 waren fast alle Mitglieder von Environment Eigenschaften, die einfache, oft feste Zeichenfolgen zurückgaben. Im Gegensatz dazu sind fast alle Mitglieder von Directory teure Operationen, die auf das Dateisystem zugreifen. – codybartfast

0

Directory.SetCurrentDirectory wirft nicht weniger als 7 Ausnahmen, so dass die Überprüfung aller Dinge, die schiefgehen könnten, zeitaufwändig sein könnte. Das Verfahren entspricht daher vermutlich mit

„DO, ein Verfahren zu verwenden, anstatt eine Eigenschaft, in den folgenden Situationen:.

The operation is orders of magnitude slower than a field access would be" 

Auch GetCurrentDirectory 2 mögliche Ausnahmen hat über ein Netzwerk und/oder mit einer großen Anzahl von Unterverzeichnissen, um diese zu navigieren, könnte im schlimmsten Fall möglicherweise Sekunden statt Millisekunden benötigen

Verwandte Themen