Как называется такая конструкция в C#?
геттер (свойство).
Оно позволяет возвращать объект типа 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 = "я тебя изменяю"
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);
    }
}
это только первое что в голову пришло...