Для установки нажмите кнопочку Установить расширение. И это всё.

Исходный код расширения WIKI 2 регулярно проверяется специалистами Mozilla Foundation, Google и Apple. Вы также можете это сделать в любой момент.

4,5
Келли Слэйтон
Мои поздравления с отличным проектом... что за великолепная идея!
Александр Григорьевский
Я использую WIKI 2 каждый день
и почти забыл как выглядит оригинальная Википедия.
Статистика
На русском, статей
Улучшено за 24 ч.
Добавлено за 24 ч.
Что мы делаем. Каждая страница проходит через несколько сотен совершенствующих техник. Совершенно та же Википедия. Только лучше.
.
Лео
Ньютон
Яркие
Мягкие

Свойство (программирование)

Из Википедии — свободной энциклопедии

Свойство — способ доступа к внутреннему состоянию объекта, имитирующий переменную некоторого типа. Обращение к свойству объекта выглядит так же, как и обращение к структурному полю (в структурном программировании), но, в действительности, реализовано через вызов функции. При попытке задать значение данного свойства вызывается один метод, а при попытке получить значение данного свойства — другой.

При применении свойств

  • можно задать значение по умолчанию, которое будет храниться в данном свойстве (или указать, что никакого значения по умолчанию не предполагается);
  • можно указать, что это свойство только для чтения.

Как правило, свойство связано с некоторым внутренним полем объекта. Но свойству вообще может не быть сопоставлена ни одна переменная объекта, хотя пользователь данного объекта имеет дело с ним так, как если бы это было настоящее поле.

Свойства повышают гибкость и безопасность программирования, поскольку, являясь частью (открытого) интерфейса, позволяют менять внутреннюю реализацию объекта без изменения его полей. Свойства значительно облегчают модификацию программы в тех случаях, когда класс изначально был реализован с нарушением инкапсуляции, а в дальнейшем потребовалось изменить способ доступа к полю. При отсутствии в языке механизма свойств потребовалось бы искать и заменять обращения к полям на методы доступа.

Методы свойств

Во многих языках программирования свойства реализуются в виде пары методов: метод, получающий текущее значение свойства, называется акцессор (accessor); метод, задающий новое значение свойства, — мутатор (mutator).[источник не указан 2786 дней] В языках программирования, не поддерживающих свойства, например, C++ и Java, пара из акцессора и мутатора является общепринятым суррогатом для их замены.

Принято называть методы свойств именем свойства с приставками get и set: например, для свойства Xyzzy — get_Xyzzy и set_Xyzzy (традиционный стиль Си) либо GetXyzzy и SetXyzzy (стиль CamelCase). В связи с этой схемой наименования за методами свойств закрепились жаргонные названия getter и setter.

Примеры

Свойства в C#

Свойства в C# — поля с логическим блоком, в котором есть ключевые слова get и set.

Пример класса со свойством:

class MyClass
{
    private int p_field;
    public int Field
    {
        get
        {
            return p_field;
        }
        private set
        {
            p_field = value;
        }
    }
}

Свойства в VB.NET

Пример реализации в VB.NET. Если нужно реализовать свойство только для чтения или только для записи, применяются модификаторы ReadOnly и WriteOnly. Свойство может быть параметризованным. Также может быть свойством по умолчанию, для этого необходимо добавить модификатор Default

Sub Main
    Dim F As New Foo

    F.Data = 5
    F.Item(0) = 5
    F(0) = 5                'Запись в свойство
    Console.WriteLine(F(0)) 'Чтение свойства
End Sub

Public Class Foo
    Private m_Data As Integer
    Private m_Arr() As Integer = {1, 2, 3, 4, 5}

    Public Property Data As Integer
        Set(Value As Integer) 'Сеттер
            m_Data = Value
        End Set
        Get
            Return m_Data 'Геттер
        End Get
    End Property

    Public Default Property Item(Param As Integer) As Integer 'Параметризованное свойство по умолчанию
        Set(Value As Integer)
            m_Arr(Param) = Value
        End Set
        Get
            Return m_Arr(Param)
        End Get
    End Property
End Class

Свойства в Delphi

Для описания свойства в Delphi служит слово property.

Пример класса со свойством:

TMyClass = class
private
  FMyField: Integer;
  procedure SetMyField(const Value: Integer);
  function GetMyField: Integer;
public
  property MyField: Integer read GetMyField write SetMyField;
end;

function TMyClass.GetMyField: Integer;
begin
  Result := FMyField;
end;

procedure TMyClass.SetMyField(const Value: Integer);
begin
  FMyField := Value;
end;

Свойства в ActionScript

class MyClass
{
    private _foo : int;
    
    public function get foo () : int {
         return _foo;
    }
    public function set foo (foo : int) : void {
         _foo = foo;
    }

}

Свойства в Objective C

@interface Company : NSObject
{
	NSString *var_name;
}

@property(retain) NSString *var_name;

@end

@implementation Company

@synthesize var_name;

@end

Свойства в Ruby

Описания свойства в Ruby ничем не отличается от описания метода. Например, для создания свойства duration у класса Song нужно описать методы duration и duration=(value)

class Song
  def duration
    @duration
  end
  def duration=(value)
    @duration = value
  end
end

Однако простое обращение к внутренней переменной объекта может быть заменено на вызов метода attr_accessor :duration

class Song
  attr_accessor :duration
end

Более интересным будет пример создания свойства duration_in_minutes, которое будет возвращать или устанавливать время длительности в минутах:

class Song
  def duration_in_minutes
    @duration/60.0
  end
  def duration_in_minutes=(value)
    @duration = (value*60).to_i
  end
end

При этом изменение свойства duration_in_minutes повлияет на свойство duration. Например

song = Song.new
song.duration_in_minutes = 1.2
print song.duration # напечатает 72

Свойства в Python

Набор методов с декораторами определяет способы работы со свойством (чтение, запись, удаление). Если какой-то из методов убрать (за исключением @property), теряется возможность работать со свойством соответствующим образом.

Пример класса со свойством:

class A:
    def __init__(self):
        self.__x = None
    
    @property
    def x(self):
        return self.__x
    
    @x.setter
    def x(self, value):
        self.__x = value
    
    @x.deleter
    def x(self):
        self.__x = None
>>> a = A()
>>> a.x
>>> a.x = 2
>>> a.x
2
>>> del a.x
>>> a.x
>>>

Свойства в PHP

Язык PHP предоставляет так называемые «магические» методы, которые перехватывают вызовы и позволяют реализовать свойства.

Пример класса со свойством:

class A
{
    private int $value = 0;
    
    public function __get(string $name): int
    {
        if ($name !== 'value') {
            throw new Exception('Property $' . $name . ' not found');
        }

        return $this->value;
    }
    
    public function __set(string $name, mixed $value): void
    {
        if ($name !== 'value') {
            throw new Exception('Property $' . $name . ' not found');
        }

        $this->value = $value + 10;
    }
    
    public function __isset(string $name): bool
    {
        return $name === 'value';
    }

    public function __unset(string $name): void
    {
        throw new Exception('Can not remove property $' . $name);
    }
}
$object = new A();

$object->value = 32;
echo $object->value; // int(42)

unset($object->value); // Error: Can not remove property $value

См. также

Эта страница в последний раз была отредактирована 8 октября 2023 в 20:20.
Как только страница обновилась в Википедии она обновляется в Вики 2.
Обычно почти сразу, изредка в течении часа.
Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License. Нетекстовые медиаданные доступны под собственными лицензиями. Wikipedia® — зарегистрированный товарный знак организации Wikimedia Foundation, Inc. WIKI 2 является независимой компанией и не аффилирована с Фондом Викимедиа (Wikimedia Foundation).