что такое свойство в программировании
Свойство (программирование)
Свойство — способ доступа к внутреннему состоянию объекта, имитирующий переменную некоторого типа. Обращение к свойству объекта выглядит так же, как и обращение к структурному полю (в структурном программировании), но, в действительности, реализовано через вызов функции. При попытке задать значение данного свойства вызывается один метод, а при попытке получить значение данного свойства — другой.
При применении свойств
Как правило, свойство связано с некоторым внутренним полем (переменной) объекта. Но свойству вообще может не быть сопоставлена ни одна переменная объекта, хотя пользователь данного объекта имеет дело с ним так, как если бы это было настоящее поле.
Свойства повышают гибкость и безопасность программирования, поскольку, являясь частью (открытого) интерфейса, позволяют менять внутреннюю реализацию объекта без изменения его свойств. По своей сути, свойства предназначены для того, чтобы свести программирование к операциям над свойствами, скрывая вызовы методов.
Содержание
Методы свойств
Во многих языках программирования свойства реализуются в виде пары методов: метод, получающий текущее значение свойства, называется акцессор (accessor); метод, задающий новое значение свойства — мутатор (mutator). В языках программирования, не поддерживающих свойства, например C++ и Java, пара из акцессора и мутатора является общепринятым суррогатом для их замены.
Принято называть методы свойств именем свойства с приставками get и set: например, для свойства Xyzzy — get_Xyzzy и set_Xyzzy (традиционный стиль Си) либо GetXyzzy и SetXyzzy (стиль CamelCase). В связи с этой схемой наименования за методами свойств закрепились жаргонные названия getter и setter.
Примеры
Свойства в C#
Пример класса со свойством:
Свойства в VB.NET
Пример реализации в VB.NET. Если нужно реализовать свойство только для чтения или только для записи, применяются модификаторы ReadOnly и WriteOnly. Свойство может быть параметризованным. Также может быть свойством по умолчанию, для этого необходимо добавить модификатор Default
Свойства в Delphi
Пример класса со свойством:
Свойства в ActionScript
Свойства в Objective C
Свойства в Ruby
Описания свойства в Ruby ничем не отличается от описания метода. Например, для создания свойства duration у класса Song нужно описать методы duration и duration=(value)
Однако простое обращение к внутренней переменной объекта может быть заменено на вызов метода attr_accessor :duration
Более интересным будет пример создания свойства duration_in_minutes, которое будет возвращать или устанавливать время длительности в минутах:
При этом изменение свойства duration_in_minutes повлияет на свойство duration. Например
См. также
Полезное
Смотреть что такое «Свойство (программирование)» в других словарях:
Свойство объекта — в объектно ориентированном программировании характеристика объекта. Обычно свойства изменяются с помощью методов. См. также: Объектно ориентированное программирование Финансовый словарь Финам … Финансовый словарь
Объектно-ориентированное программирование — Эта статья во многом или полностью опирается на неавторитетные источники. Информация из таких источников не соответствует требованию проверяемости представленной информации, и такие ссылки не показывают значимость темы статьи. Статью можно… … Википедия
Автоматное программирование — Автоматное программирование это парадигма программирования, при использовании которой программа или её фрагмент осмысливается как модель какого либо формального автомата. В зависимости от конкретной задачи в автоматном программировании… … Википедия
Инкапсуляция (программирование) — У этого термина существуют и другие значения, см. Инкапсуляция. В языках программирования инкапсуляция имеет одно из следующих значений, либо их комбинацию: языковой механизм ограничения доступа к определённым компонентам объекта; языковая… … Википедия
Делегирование (программирование) — В объектно ориентированном программировании существуют два смежных понятия делегирования. В современном понимании это означает свойство языка программирования использовать правила поиска метода для диспетчеризации так называемых self calls… … Википедия
Объектно-ориентированное программирование на Python — Объектно ориентированное программирование на Python программирование на Python с использованием парадигмы ООП: с самого начала Python проектировался как объектно ориентированный язык программирования[1]. Содержание 1 Введение 1.1 … Википедия
Математическое программирование — математическая дисциплина, посвященная теории и методам решения задач о нахождении экстремумов функций на множествах, определяемых линейными и нелинейными ограничениями (равенствами и неравенствами). М. п. раздел науки об… … Большая советская энциклопедия
МАТЕМАТИЧЕСКОЕ ПРОГРАММИРОВАНИЕ — математическая дисциплина, посвященная теории и методам решения задач о нахождении экстремумов функций на множествах конечномерного векторного пространства, определяемых линейными и нелинейными ограничениями (равенствами и неравенствами). М. п.… … Математическая энциклопедия
ЛИНЕЙНОЕ ПРОГРАММИРОВАНИЕ — математическая дисциплина, посвященная теории и методам решения задач об экстремумах линейных функций на множествах n мерного векторного пространства, задаваемых системами линейных неравенств и равенств; Л. п. один из разделов математического… … Математическая энциклопедия
Объектно-ориентированное программирование на Питоне — С самого начала Питон проектировался как объектно ориентированный язык программирования [1]. Содержание 1 Введение 1.1 Принципы ООП … Википедия
Использование свойств (Руководство по программированию в C#)
В отличие от полей, свойства не классифицируются как переменные. Соответственно, нельзя передать свойство в качестве параметра ref или out.
Свойства нашли широкое применение в программировании. Их можно использовать для проверки данных перед подтверждением изменения; для прозрачного предоставления доступа к данным класса, которые фактически извлекаются из других источников, например из базы данных; для выполнения действия при изменении данных (например, в этом случае может создаваться событие или изменяться значение других полей).
В этом примере Month объявляется как свойство, а метод доступа set обеспечивает установку значения Month в диапазоне от 1 до 12. Для отслеживания фактического значения свойство Month использует частное поле. Фактическое местоположение данных свойства часто называется «резервным хранилищем». Как правило, в качестве резервного хранилища свойства используют частные поля. Поле помечается как частное для того, чтобы гарантировать возможность его изменения только посредством вызова свойства. Дополнительные сведения об ограничениях открытого и закрытого доступа см. в разделе Модификаторы доступа.
Автоматически реализуемые свойства поддерживают упрощенный синтаксис для простых объявлений свойств. Дополнительные сведения см. в разделе Автоматически реализуемые свойства.
Метод доступа get
Метод доступа get должен завершаться инструкцией return или throw, при этом управление не может передаваться из тела метода доступа.
Метод доступа get можно использовать для возврата значения поля напрямую или после вычисления. Пример:
Метод доступа set
При присвоении значения свойству вызывается метод доступа set с аргументом, содержащим новое значение. Пример:
Использование имени явного параметра ( value ) для объявления локальной переменной в методе доступа set является ошибкой.
Метод доступа init
Комментарии
Свойство может быть помечено как виртуальное с помощью ключевого слова virtual. Это позволяет производным классам переопределять поведение свойства с помощью ключевого слова override. Дополнительные сведения об этих параметрах см. в разделе Наследование.
Свойство, переопределяющее виртуальное свойство, также может быть запечатанным (sealed). Это указывает, что для производных классов оно больше не является виртуальным. Наконец, свойство можно объявить абстрактным (abstract). Это означает, что в классе не будет определена реализация такого свойства, и в производных классах должны использоваться собственные реализации. Дополнительные сведения об этих параметрах см. в разделе Абстрактные и запечатанные классы и члены классов.
Использование модификаторов virtual, abstract или override в методе доступа статического (static) свойства является ошибкой.
Примеры
В этом примере демонстрируются свойства экземпляра, а также статические и доступные только для чтения свойства. Этот метод принимает введенное с клавиатуры имя сотрудника, увеличивает значение NumberOfEmployees на 1, после чего отображает имя и номер сотрудника.
Пример скрытого свойства
В этом примере демонстрируется доступ к свойству базового класса, которое скрыто в производном классе другим свойством с таким же именем:
На что следует обратить внимание в предыдущем примере:
Свойство Name в производном классе скрывает свойство Name базового класса. В таком случае в объявлении свойства в производном классе используется модификатор new :
Для доступа к скрытому свойству в базовом классе используется приведение (Employee) :
Дополнительные сведения о скрытии элементов см. в разделе Модификатор new.
Пример переопределения свойства
Свойства в C#
Свойство в языке С# – это член класса, который предоставляет механизм доступа к полю класса (чтение и запись). При использовании свойства, мы обращаемся к нему, как к полю класса, но на самом деле вызывается соответствующий неявный метод, называемый аксессором (accessor). Существует два таких метода: get (для получения данных) и set (для записи).
Объявление простого свойства имеет следующую структуру:
Приведем пример использования свойств. Имеется класс Экзамен (Exam), и в нем есть закрытое поле (оценка) rating, которое не может быть ниже 0 и больше 10. Для управления доступом к этому полю будет использовано свойство Rating:
В свойстве Rating реализуются два метода. В теле аксессора get в итоге должно возвращаться либо значение поля, либо другое значение. В примере 10-ти бальная оценка пересчитывается в 4-х балльную: 2,3,4,5. В аксессоре же присутствует неявный параметр value, который содержит значение, присваиваемое свойству, причем полю будет присваиваться целое число от 0 до 10.
Если, например, мы бы просто сделали поле rating открытым и не использовали бы ни методы, ни свойство для доступа, то мы могли бы записать в это поле любое значение, в том числе и некорректное, а так мы можем контролировать чтение и запись.
Для контроля доступа мы могли бы использовать простые методы, но для этого нам бы пришлось реализовать два отдельных метода с разными именами, и при обращении к ним необходимо использовать скобки, что добавляет лишние неудобства.
Свойство также может предоставлять доступ только к чтению поля или только к записи. Если, например, нам необходимо закрыть доступ на запись, мы просто не указываем аксессор set. Пример:
Заметим, что само свойство не определяет место в памяти для хранения поля, и, соответственно, необходимо отдельно объявить поле, доступом к которому будет управлять свойство (например, rating и Rating).
Автоматические свойства
Автоматическим называют свойство, которое, в отличие от обычного свойства, уже определяет место в памяти (создает неявное поле), но при этом не позволяет создавать логику доступа. Структура объявления::
[модификатор доступа] [тип] [имя_свойства]
У аксессоров таких свойств отсутствует тело. Пример использования:
Автоматически реализуемые свойства имеет смысл использовать тогда, когда нет необходимости накладывать какие-либо ограничения на возможные значения неявного поля свойства. Чем же они тогда предпочтительнее полей? Ответ: У таких свойств остается возможность сделать их только на чтение или только на запись. Для этого используется модификатор доступа private, указываемый перед именем аксессора:
public int Rating < private get; set; >// свойство только на запись
или
public int Rating < get; private set; >// свойство только на чтение
Обратите внимание, что значительная часть членов классов являются именно полями. Разберите также пример работы со свойствами.
Классы и объекты C#: свойства
На данный момент мы познакомились с таким типом данных в C# как класс, научились создавать объекты и использовать инициализаторы объектов. Сегодня мы познакомимся с таким понятием как свойство и рассмотрим основные модификаторы доступа к членам класса.
Введение
На данный момент у нас есть класс, описывающие некоторое здание прямоугольной формы:
Модификаторы доступа
Модификаторы доступа можно указывать явно, например, как в нашем классе:
Свойства
Как было сказано выше — давать доступ к полям класса извне (объявлять их с модификатором доступа public ) — признак плохого программирования. И в прошлой части, касающейся работы с классами, модификатор public был использован всего лишь с одной целью — чтобы максимально кратко объяснить суть работы инициализаторов объектов без углубления в тему свойств класса.
никакой ошибки нет — мы просто задали отрицательную высоту здания и получим в итоге отрицательный объем. Так вот,в том числе, чтобы избежать подобных ситуаций и могут применяться свойства. Свойство позволяет обеспечить контролируемый доступ к полям класса — обеспечить дополнительную логику. Например,мы можем сделать ограничения по максимальному и минимальному значению поля, можем запретить изменять какое-либо поле класса и так далее.
В общем случае, свойство определяется в классе следующим образом:
На что здесь стоит обратить внимание:
Теперь, если попробовать запустить приложение и выполнить вот такое присваивание:
то программа выдаст ошибку:
Так же, мы можем объявлять свойства доступные только для чтения (у таких свойств будет отсутствовать блок set ) и только для записи (у таких свойств отсутствует блок get ). Второй вариант свойств (только для записи) встречается крайне редко, а вот свойства только для чтения — довольно часто. Например, мы можем создать свойство «Объем» следующим образом:
Теперь, познакомившись с тем, что такое свойства в C# перепишем допишем наш класс и создадим необходимые свойства для задания параметров:
Чтобы обратиться к свойству мы должны написать имя объекта, нажать на клавиатуре точку и выбрать интересующее нас свойство:
Сокращенная форма записи свойств в C#
Если в блоках get и set свойства не реализуется никакая дополнительная логика, то допускается сокращенная записи свойства. Например, добавим в наш объект свойство Name (название здания) и применим сокращенную форму записи:
Как видите, в этом случае нам не требуется объявлять в классе дополнительное поле, а блоки get и set остаются пустыми. Такие свойства также называются автосвойствами.
Выражения для свойств в C#
Использование выражений свойств, также, как и выражение switch о котором мы говорили, когда рассматривали логические операции C#, позволяют сделать код короче и интуитивно понятнее.
Значение свойства по умолчанию в C#
То есть сразу после закрывающей скобки > для свойства ставится равно и пишется значение свойства по умолчанию.
Итого
Итак, сегодня мы познакомились в общих чертах с модификаторами и уровнями доступа к членам классов (полям, свойствам и методам), а также разобрались с тем, что представляют из себя свойства, как их объявлять в классе, делать свойства C# доступными только для чтения, а также использовать автосвойства и выражения для свойств C#. В следующий раз мы продолжим разбираться с классами и объектами C# и рассмотрим такой вопрос, как наследование.
Свойства в C#: назначение, использование, примеры
В статье поговорим о свойствах полей класса ( c# get set ). Разберемся с определением и назначением этой структуры, а также рассмотрим примеры внедрения этой концепции в C#-приложения.
Содержание:
Что такое свойство в C#?
Свойство в C# является членом класса, который используется для установки и получения данных из поля данных класса. Самый важный момент, о котором нужно помнить — свойство в C# никогда не используется для хранения данных, оно действует как интерфейс для их передачи. Это своего рода расширение переменных класса, предоставляющее возможность читать, записывать или изменять значения этих переменных, не влияя на внешний способ доступа к ним в приложении.
Записываются свойства ( property ) так:
При написании свойств важно определиться с модификатором и типом возвращаемого значения, чтобы внести необходимые изменения в переменные класса (исходя из того, что нам требуется).
В такой конструкции код в методе get будет выполняться всякий раз, когда свойство читается (возвращает результат), а код в методе set будет отрабатывать, когда свойство переопределяется другим значением.
Такая структура данных в С#, подразделяются на три типа:
Также следует помнить, что свойства не принимают никаких параметров, а тип данных свойств должен быть таким же, как у полей, для которых мы его создаем.
Вот простейший пример определения приватной переменной со свойством:
Здесь мы написали свойство «Color» с методами get (для возврата значения) и set (для его переопределения).
Сразу отметим, что в методе get мы либо возвращаем, либо вычисляем, а затем возвращаем значение поля. Но тут важно понимать, что акссесор не используется для изменения состояния объекта! С помощью методов get и set можно лишь расширить поведение переменных:
Таким образом применение концепции свойств дает полный контроль над доступом к полям класса.
Вот как это выглядит:
Преимущества применения такой концепции
Вы можете задаться вопросом: для чего так необходимы эти свойства? Ведь в подобных ситуациях можно обойтись обыкновенными переменными класса. Вся суть концепции свойств заключается в возможности вкладывания в переменные дополнительной логики.
Например, при присваивании ей другого значения:
А еще, применяя свойства, мы:
Read-Write
Влияние модификаторов доступности свойств на переменные
Для использования нашего свойства необходимо объявить его открытым (public). Иначе нам не удастся получить к нему доступ и результатом будет ошибка компилятора. Также можно использовать модификаторы отдельно во внутренних блоках свойства.
Однако тут мы должны помнить о ряде существующих ограничений:
Свойства и массив double
Рассмотрим пример по реализации свойства double-массива. Объявим:
В Summary get вычисляет сумму всех членов массива, а set — раздает им значение.
Создание свойства Read-only
Запустив нашу программу, мы получим следующий результат:
Name: Sheldon Cooper
Loc: Pasadena
Создание свойства write-only
Результат программы будет такой же, как и в предыдущем примере.
Автоматически реализуемые свойства
Автоматическим называется свойство, содержащее стандартные методы доступа ( get, set ) без какой-либо логической реализации, например:
Такой подход уменьшает объем написанного кода. При применении автоматических свойств компилятор С# неявно создает частное, анонимное поле за кулисами для получения данных.
Структурная переменная и доступ к ней (пример)
Ab = 5
rd = 3
R.nume = 3, R.deno = 1
Рассматривая свойства, надо отметить, что они не добавляют место в памяти для переменных класса, а только контролируют доступ к ним. А также не являются членами данных класса, а переменные определяются независимо от них.
Обзор рассматриваемой концепции
Давайте кратко перечислим наиболее важные моменты, которые необходимо четко понимать при работе со свойствами:
Для лучшего восприятия и освоения рассматриваемой концепции предлагаю посмотреть видеоролик по теме: