@flafy4

Как называется такая конструкция в C#?

Как называется такая конструкция? А именно get, return... Что она вообще делает?
private Matrix transform;
public Matrix Transform
{
     get { return transform; }
}
  • Вопрос задан
  • 618 просмотров
Решения вопроса 1
tomnolane
@tomnolane
профессиональный разработчик
геттер (свойство).

Оно позволяет возвращать объект типа Matrix под именем transform, который храниться в приватной "Области видимости". И это стандартная "тема".

Допустим, есть объект который только хранит в себе что-то private string my_string = "что-то";
он находится в области видимости "private" - т.е. доступен для использования только в рамках того класса, где он находится. В другом классе к нему (my_string) нельзя получить доступ и изменить. И в идеале так и нужно делать, чтобы созданные объекты были доступны только там, где надо, а не везде...
далее создаём геттер (который только отдаёт значение объекта my_string, при этом сам в себе ничего не хранит (только ссылку),
private string my_string = "что-то";
public string My_String { get { return my_string ; } }

его (My_String ) делают открытым (public) и позволяют безопасно получать данные из my_string;

аналогично можно сделать сеттер, но ниже покажу самый распространённый:
private string my_string = "что-то";
public string My_String { get { return my_string ; } set { my_string  = value; }}

в этом случае мы можем записывать (условно безопасно из другого класса к примеру) в my_string какие-то данные через My_String.

всё это делается очень легко:
//получить данные из my_string (get)
var temp = My_String; 
//записать/установить/изменить данные в my_string (set)
My_String = "я тебя изменяю";  // в этом случае в  будет не my_string = "что-то", а my_string = "я тебя изменяю"
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
DmitryITWorksMakarov
@DmitryITWorksMakarov
Tom Nolane и flafy4 Геттеры и сеттеры нужны не только чтобы "выводить приватную переменную наружу".

Если приватные переменные прячут в "приватной области видимости" значит это кому-нибудь нужно. Что мешает просто изменить модификатор доступа у поля сделав его доступным снаружи, чем городить какие-то геттеры/сеттеры?

Есть куча более интересных применений геттеров и сеттеров, например:

уведомить об изменении состояния объекта:
string _StateValue;
public string stateValue
{
    get {return _StateValue; }
    set 
    {
        _StateValue = value;
        OnStateValueChanged(value); //этот метод генерирует событие на которое подписаны все кому интересно изменения этого поля, например при изменении поля могут по событию перерисовываться форма
    }
}


выполнить отложенную инициализацию поля, хотя есть и другие способы это сделать, например через Lazy:
string _CaсhedValue = null;
string cachedValue
{
    get
    {
        if (_CachedValue == null)
        {
            _CachedValue = CreateValue(); //этот метод вычисляет значение
        }
        return _CachedValue; 
    }
}


вычисляемые свойства
PointF _Start;
PointF _Stop;
PointF center 
{
    get
    {
        return new PointF((_Start.X+_Stop.X)/2,(_Start.Y+_Stop.Y)/2);
    }
}


это только первое что в голову пришло...
Ответ написан
Ваш ответ на вопрос

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

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