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.
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.
'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.)''
''
★ )''
' 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
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
'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)"!''
'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)''
'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;
★ Uniform access principle
★ Method (computer science)
★ Field (computer science)
| 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
Featured Companies
| Great Time Travel | |
| Sheraton Vancouver Airport Hotel | |
| Optimum 1 Travel | |
| Aquaworld Cancun |

العربية
中国
Français
Deutsch
Ελληνική
हिन्दी
Italiano
日本語
Português
Русский
Español