Вопрос по .net, c# – В чем разница между Environment.CurrentDirectory и Directory.GetCurrentDirectory?

24

В .NET какая разница между:

Environment.CurrentDirectory Directory.GetCurrentDirectory()?

Конечно,Environment.CurrentDirectory это свойство, которое может быть установлено и получено.

Есть ли другие отличия?

Ваш Ответ

4   ответа
0

Directory.SetCurrentDirectory генерирует не менее 7 исключений, поэтому проверка всех вещей, которые могут пойти не так, может занять много времени. Следовательно, этот метод, по-видимому, соответствует

& quot; НЕ используйте метод, а не свойство, в следующих ситуациях:

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

Даже GetCurrentDirectory имеет 2 потенциальных исключения. По сети и / или с большим количеством подкаталогов для навигации это может занять секунды вместо миллисекунд в худшем случае.

24

Как и в других ответах, нет никакой разницы - реализацияEnvironment.CurrentDirectory делегатыGet а такжеSet методы вDirectory.

Возникает интересный вопрос о стилистическом API-дизайне - почему дизайнерыEnvironment чувствую, что обычное свойство было уместным, тогда как дизайнерыDirectory предпочтительный явныйGet а такжеSet методы?

В книге «Руководство по проектированию инфраструктуры» есть много слов о выборе свойств по сравнению с методами, некоторые из которыхдоступно онлайн, Мне кажется, наиболее важными частями (с моими акцентами) являются:

A rule of thumb is that methods should represent actions and properties should represent data. Properties are preferred over methods if everything else is equal

...

CONSIDER using a property, if the member represents a logical attribute of the type

...

DO use a method, rather than a property, in the following situations: The operation is orders of magnitude slower than a field access would be

С учетом всего сказанного, мое мнение таково, чтоGet а такжеSet methods лучше представить, что здесь происходит.

Я думаю, что это более логичное различие, которое является причиной этого. Это естественное свойство в контексте Среды, но в Справочнике это скорее «каталог, связанный». вспомогательная функция.
Последовательность с остальной частью класса, вероятно, тоже была фактором. В версии 1.1 почти все члены Environment были свойствами, возвращающими простые, часто фиксированные строки. В отличие от этого почти все члены Каталога являются дорогостоящими операциями доступа к файловой системе.
+1 Я не часто голосую в вопросах и ответах, в которых я также публикую сообщения, но упоминание о том, что Руководство по разработке дизайна, заслуживает одобрения. Я также согласен с вашим выводом.
24

Как говорит Давид: они делают то же самое. Внутренне, при полученииEnvironment.CurrentDirectory это позвонитDirectory.GetCurrentDirectory и при настройкеEnvironment.CurrentDirectory это позвонитDirectory.SetCurrentDirectory.

Просто выберите любимый и идти с ним.

2

Нет, других отличий нет.

Похожие вопросы