Хочу обратиться к данному элементу через другой класс:
public static string WinDir = (Environment.GetEnvironmentVariable("windir"));
Из видео-уроков по c# я понял что это не правильно.
Как лучше использовать свойства?
Так:
public static string WinDir {get;set;} = (Environment.GetEnvironmentVariable("windir"));
Или так:
public static string WinDir {get;private set;} = (Environment.GetEnvironmentVariable("windir"));
Меня интересуют последние 2 способа:
{get;set;} - Его же можно изменять из другого класса правильно?
А {get;private set;} - изменять нельзя, он только получит путь?!
Ну во-первых, мало толку от создания статической обертки над статическим методом из стандартной библиотеки, почему бы не использовать сразу Environment.GetEnvironmentVariable("windir") там где он нужен.
Во-вторых, (уж не знаю какая вероятность у этого, но) результат этого метода может меняться от вызова к вызову, поэтому не очень хорошо сохранять его и всегда использовать сохраненное значение, поэтому, опуская предыдущий абзац лучше уж написать что-то вроде:
public static string WinDir { get { return Environment.GetEnvironmentVariable("windir"); } }
или, в новых версиях языка, можно сократить до выражения:
public static string WinDir => Environment.GetEnvironmentVariable("windir");
Ну и, если не учитывать все вышеизложенное, у вас есть несколько путей:
Если функционал свойства не нужен (а в некоторых случаях от них нельзя уйти), то можно сделать readonly-поле:
public static readonly string WinDir = Environment.GetEnvironmentVariable("windir");
В новых версиях языка также появилась возможность создания свойств только для чтения без явного использования backing-field:
public static string WinDir { get; } = Environment.GetEnvironmentVariable("windir");
Что касается ваших вопросов:
{ get; set; } - да, это свойство может быть изменено снаружи и это вам, скорее всего, не нужно.
{ get; private set; } - это свойство может быть изменено только в коде этого класса, это уже лучше, но все равно вероятность ошибки есть.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей