PROPERTY (PROGRAMMING)

In some object-oriented programming languages, a 'property' is a special sort of class member, intermediate between a field (or data member) and a method. You read and write a property just as you read and write a field, but this is (usually) translated to get and set method calls. The field-like syntax is easier to read and write than lots of method calls, yet the interposition of method calls allows for data validation, active updating (as of GUI visuals), and/or read-only 'fields'. That is, properties are intermediate between member code (methods) and member data (instance variables) of the class, and properties provide a higher level of encapsulation than public fields.

Contents
Support in languages
Example syntax
Delphi
Visual Basic
Visual Basic .Net
C#
Python
PHP
See also

Support in languages


Programming languages that support properties include Delphi, Visual Basic and C#. Some object-oriented languages, such as C++ and Java, don't support properties, and require the programmer to define a pair of ''accessor'' and ''mutator'' methods instead.
In most languages, properties are implemented as a pair of accessor/mutator methods, but accessed using the same syntax as for public fields. Omitting a method from the pair yields a ''read-only'' or ''write-only'' property, the latter being rather uncommon.
In some languages with no built-in support for properties, a similar construct can be implemented as a single method that either returns or changes the underlying data, depending on the context of its invocation. Such techniques are used e.g. in Perl.

Example syntax


Delphi

'type' TPen = 'class'
'private'
m_Color: 'Integer';
'function' Get_Color: 'Integer';
'procedure' Set_Color(RHS: 'Integer');
'public'
'property' Color: 'Integer read' Get_Color 'write' Set_Color;
end;
'function' TPen.Get_Color: 'Integer';
'begin'
Result := m_Color
'end';
'procedure' TPen.Set_Color(RHS: 'Integer');
'begin'
m_Color := RHS
'end';
''// accessing:''
'var' pen: TPen;
''// ...''
pen.Color := 'not' pen.Color;
''(
★ ''
''Delphi also supports a 'direct field' syntax -''
'''property' Color: 'Integer read' m_Color 'write' Set_Color;''
''or''
'''property' Color: 'Integer read' Get_Color 'write' m_Color;''
''where the compiler generates the exact same code as for reading and writing''
''a field. This offers the efficiency of a field, with the safety of a property.''
''(You can't get a pointer to the property, and you can always replace the member''
''access with a method call.)''
''
★ )''
Visual Basic

' in a class named clsPen
Private m_Color As Long
Public Property Get Color() As Long
Color = m_Color
End Property
Public Property Let Color(ByVal RHS As Long)
m_Color = RHS
End Property
' accessing:
Dim pen As New clsPen
' ...
pen.Color = Not pen.Color
Visual Basic .Net

Public Class Pen
Private m_Color as Integer ' Private field
Public Property Color as Integer ' Public property
Get
Return m_Color
End Get
Set(ByVal Value as Integer)
m_Color = Value
End Set
End Property
End Class
' accessing:
Dim pen As New Pen()
' ...
pen.Color = Not pen.Color
C#

'class' Pen
{
'private int' m_Color; ''// private field''
'public int' Color ''// public property''
{
'get'
{
'return' m_Color;
}
'set'
{
m_Color = value;
}
}
}
''// accessing:''
Pen pen = 'new' Pen();
''// ...''
pen.Color = ~pen.Color; ''// bitwise complement ...''
''// another silly example:''
pen.Color += 1; ''// a lot clearer than "pen.set_Color(pen.get_Color() + 1)"!''
Python

'class' Pen:
'def' __init__(self):
self._color = 0 ''# "private" variable''
self._readonly = "Don't Assign to Me!"
'def' _set_color(self, color):
self._color = color
'def' _get_color(self):
return self._color
color = property(_get_color, _set_color) ''# read/write access translates to get/set methods''
'def' _get_readonly(self):
return self._readonly
readonly = property(_get_readonly) ''# read-only access is provided (writing throws an exception)''
''# accessing:''
pen = Pen()
''# ...''
pen.color = ~pen.color ''# bitwise complement ...''
print pen.readonly ''# this prints "Don't Assign to Me!"''
pen.readonly = "Something Else" ''# this fails (raises an exception)''
PHP

'class' Pen {
'private' $_color;
'function' __set($property, $value) {
'switch' ($property) {
'case' 'Color': $this->_color = $value; break;
}
}
'function' __get($property) {
'switch' ($property) {
'case' 'Color': return $this->_color; break;
}
}
}
$p = 'new' Pen();
$p->Color = !$p->Color;
echo $p->Color;

See also



Uniform access principle

Method (computer science)

Field (computer science)

This article provided by Wikipedia. To edit the contents of this article, click here for original source.

psst.. try this: add to faves