C#
Как работают элементы доступа set и get в C#? Никак не могу понять их. Ответьте только по делу, не нужно писать ерунду
Запись(set) и чтение(get)
Ramil Agarzayev
Браво, сэр Paho
Дмитрий Хроменко
Camon, это и так понятно, как его использовать? Я этого не понимаю, для каких целей он нужен. Запись чего? string и int?
Это методы доступа к элементу класса. Для надежности кода часто полезно не давать прямого доступа к полю класса, к тому же в такие методы могут быть включены дополнительные действия, например, преобразование данных.
Это то же самое, что запись в глобальную переменную, только через посредника в виде сеттера метода. Грубо говоря:
public void setMyValue(string value) {
this.MyValue = value;
}
Только в более читаемой сокращенной записи. Нужно это для того, чтобы класс имел возможность контролировать любую попытку чтения или записи данных. В какой-то момент может возникнуть потребность в каких-то изменениях при записи или чтении, это лучше бесконтрольного доступа к данным.
public void setMyValue(string value) {
this.MyValue = value;
}
Только в более читаемой сокращенной записи. Нужно это для того, чтобы класс имел возможность контролировать любую попытку чтения или записи данных. В какой-то момент может возникнуть потребность в каких-то изменениях при записи или чтении, это лучше бесконтрольного доступа к данным.
Дмитрий Хроменко
То нужно просто для того что бы получить доступ к какому либо private переменной из другого класса, в классе Main?
Другими словами я просто могу использовать private переменную в глобальном методе, а не использовать эти элементы доступа?
Другими словами я просто могу использовать private переменную в глобальном методе, а не использовать эти элементы доступа?
Запись(set) и чтение(get)
для wpf ты в любом случае должен будешь ими пользоваться, но и в winForm`е труда дописать {get; set; } не составит.
зато в любой момент сможешь добавить дополнительную обработку на эту переменную.
например ты создаешь свойство, которое хранить уровень громкости и хочешь ограничить его значение диапазоном от 0 до 100:
private int _volume = 70;
public int Volume { get => _volume; set => _volume = Math.Max(0, Math.Min(100, value)); }
или твой класс содержит несколько других классов, которые создаются длительное время, но при этом ты почти ни когда не задействуешь их все и не хочешь тратить время на их создание без необходимости:
private MyMegoClass _myMegoClassEx1;
private MyMegoClass _myMegoClassEx2;
private MyMegoClass _myMegoClassEx3;
public MyMegoClass MyMegoClassEx1 { get => _myMegoClassEx1 ??= new MyMegoClass(); }
public MyMegoClass MyMegoClassEx2 { get => _myMegoClassEx2 ??= new MyMegoClass(); }
public MyMegoClass MyMegoClassEx3 { get => _myMegoClassEx3 ??= new MyMegoClass(); }
а возможно ты захочешь чтобы пустая строка ни когда не была null:
private string _content = string.Empty;
public string Content { get => _content; set => _content = string.IsNullOrEmpty(value) ? string.Empty : value; }
или вообще отдельное свойство которое кажет есть ли содержимое в твоем контенте:
public static bool HasContent { get => Content.Any(); }
это дает гибкость без лишних строк строк кода на написание методов типо:
public object GetContent() {...}
public object SetContent(object value) {...}
хотя и их использование ни кто не запрещает. дело вкуса.
зато в любой момент сможешь добавить дополнительную обработку на эту переменную.
например ты создаешь свойство, которое хранить уровень громкости и хочешь ограничить его значение диапазоном от 0 до 100:
private int _volume = 70;
public int Volume { get => _volume; set => _volume = Math.Max(0, Math.Min(100, value)); }
или твой класс содержит несколько других классов, которые создаются длительное время, но при этом ты почти ни когда не задействуешь их все и не хочешь тратить время на их создание без необходимости:
private MyMegoClass _myMegoClassEx1;
private MyMegoClass _myMegoClassEx2;
private MyMegoClass _myMegoClassEx3;
public MyMegoClass MyMegoClassEx1 { get => _myMegoClassEx1 ??= new MyMegoClass(); }
public MyMegoClass MyMegoClassEx2 { get => _myMegoClassEx2 ??= new MyMegoClass(); }
public MyMegoClass MyMegoClassEx3 { get => _myMegoClassEx3 ??= new MyMegoClass(); }
а возможно ты захочешь чтобы пустая строка ни когда не была null:
private string _content = string.Empty;
public string Content { get => _content; set => _content = string.IsNullOrEmpty(value) ? string.Empty : value; }
или вообще отдельное свойство которое кажет есть ли содержимое в твоем контенте:
public static bool HasContent { get => Content.Any(); }
это дает гибкость без лишних строк строк кода на написание методов типо:
public object GetContent() {...}
public object SetContent(object value) {...}
хотя и их использование ни кто не запрещает. дело вкуса.
Похожие вопросы
- Решил попробовать изучать программирование (C# конкретно) и вот не могу понять почему код с упражнения не работает
- C# Массив структур.Конструктор .Доступ к отдельным элементам массива в массиве структур.
- DI C# как понять? Что это такое? Как в коде писать? Простыми словами обьясните зависимости эти А то везде сложно пишут
- По пути "C:\Пользователи\"USERNAME"\Документы\Мои видеозаписи" доступ запрещён
- C#. Как вернуть индекс определенного элемента массива?Почему ошибка?
- Почему в C# нумерация (индексы) элементов массива начинаются с нуля, а не с единицы?
- Не работает калькулятор на c#
- Как можно найти одинаковые элементы массива? С#
- Стоит ли дальше учить C#?
- Зачем разбивать код в C# на отдельные классы?