В .NET какая разница между:
-
Environment.CurrentDirectory
-
Directory.GetCurrentDirectory()
?
Конечно, Environment.CurrentDirectory
- это свойство, которое можно установить и получить.
Есть ли другие отличия?
В .NET какая разница между:
Environment.CurrentDirectory
Directory.GetCurrentDirectory()
?Конечно, Environment.CurrentDirectory
- это свойство, которое можно установить и получить.
Есть ли другие отличия?
Как говорит Дэвид: они делают то же самое. Внутри, при получении Environment.CurrentDirectory
он вызывается Directory.GetCurrentDirectory
, а при установке Environment.CurrentDirectory
он вызывается Directory.SetCurrentDirectory
.
Просто выберите фаворита и идите с ним.
В соответствии с другими ответами нет никакой разницы - реализация Environment.CurrentDirectory
делегирует методы Get
и Set
в Directory
.
Есть интересный стильный вопрос API-дизайна, который поднимает - почему дизайнеры Environment
считают подходящим регулярное свойство, тогда как разработчики Directory
предпочитают явные методы Get
и Set
?
В книге "Руководства по дизайну каркаса" можно рассказать о выборе свойств и методов, некоторые из которых доступны в Интернете. Мне кажется, что наиболее значимые части меня (с моими акцентами):
Эмпирическое правило состоит в том, что методы должны представляют действия и свойства должны представлять данные. Свойства: предпочитают более методы , если все else равно
...
- CONSIDER с использованием свойства, если элемент представляет собой логический атрибут типа
...
- Используйте метод, а не свойство, в следующих ситуациях:
- Операция на несколько порядков медленнее, чем доступ к полю будет
Считаю все, что я считаю, что явные методы Get
и Set
лучше отражают то, что здесь происходит.
Нет, других различий нет.
Directory.SetCurrentDirectory генерирует не менее 7 исключений, поэтому проверка всех вещей, которые могут пойти не так, может занять много времени. Поэтому метод, по-видимому, соответствует
"НЕ используйте метод, а не свойство, в следующих ситуациях:
The operation is orders of magnitude slower than a field access would be"
Даже GetCurrentDirectory имеет 2 потенциальных исключения. По всей сети и/или с большим количеством подкаталогов для навигации по ним потенциально может потребоваться секунды вместо миллисекунд в худшем случае.