waee7
@waee7

Объясните работу get и set в c#?

Доброго времени суток. Может кто простым языком объяснить как работает get и set в c#? А то читал много, но не особо понятно. Вот последнее читал на метаните, там тоже не очень понятно. Заранее спасибо!
  • Вопрос задан
  • 2955 просмотров
Решения вопроса 1
@hello_my_name_is_dany
Backend Developer (Node.js, PHP, C#)
Конструкция свойств get-set генерирует скрытые (для синтаксиса) методы и поле
Например,
class Human
{
    public string Name { get; set }
}

преобразуется на уровне компилятора в
class Human
{
    private string _name;

    public string GetName()
    {
        return this._name;
    }

    public void SetName(string value)
    {
        this._name = value;
    }
}


Но get и set можно переопределять, но тогда поле не генерируется и надо самому определить (или использовать существующее, в зависимости от логики)
Например,
class Human
{
    private string _phone;

    public string Phone
    {
        get => "Human phone" + this._phone;
        set =>
        {
            this._phone = value;
            if (value[0] != '+') this._phone = "+" + this._phone;
        }
    }
}

Преобразуется в
class Human
{
    private string _phone;

    public string GetPhone()
    {
        return "Human phone: " + this._phone;
    }

    public void SetPhone(string value)
    {
        this._phone = value;
        if (value[0] != '+') this._phone = "+" + this._phone;
    }
}


Ну и обращения к свойствам в качестве полей заменяется на вызов метода
var human = new Human();
human.Name = "John";
Console.WriteLine(human.Name);

преобразуется в
Human human = new Human();
human.SetName("John");
Console.WriteLine(human.GetName());


А если не указать get или set, то соответственно не будет генерироваться метод на чтение или запись
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
vabka
@vabka Куратор тега C#
Токсичный шарпист
get и set во время компиляции просто превращаются в два метода.
Если это автосвойства, то ещё и поле добавляется.
имена у них будут get_НазваниеСвойства и set_НазваниеСвойства.
Ответ написан
Комментировать
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Гет возвращает значение Сет устанавливает. Разница с переменной ты можешь что то делать. Например проверять на валидность
Ответ написан
Комментировать
HemulGM
@HemulGM
Delphi Developer, сис. админ
Достаточно поискать (первая строка в гугле) https://metanit.com/sharp/tutorial/3.4.php
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы