ویژگی (برنامهنویسی)
در برخی از زبانهای شیگرا، ویژگی (به انگلیسی: Property) حالتی از اعضای کلاس است که خصوصیاتی ما بین فیلد و متد دارد. آنها مانند فیلدها قابلیت خواندن و نوشتن دارند ولی خواندن و نوشتن در آنها (معمولا) به فراخوانی یک تابع میانجامد.
پشتیبانی در زبانها
زبانهایی که property را پشتیبانی میکند شامل دلفی٬ ویژوال بیسیک سیشارپ و بسیاری از زبانهای شیگرا میشود ولی بعضی از زبانهای شی گرا مانند جاوا این قابلیت را به صورت محدودتری دارا هستند.
مثال
Delphi/Free Pascal
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_Colorend;procedure TPen.Set_Color(RHS: Integer);begin m_Color := RHSend;
// accessing:var pen: TPen;// ...pen.Color := not pen.Color;
Visual Basic 6
' in a class named clsPenPrivate m_Color As LongPublic Property Get Color() As Long Color = m_ColorEnd PropertyPublic Property Let Color(ByVal RHS As Long) m_Color = RHSEnd Property
' accessing:Dim pen As New clsPen' ...pen.Color = Not pen.Color
Visual Basic (.NET to 2008)
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 PropertyEnd 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)"!
در نسخه اخیر آن به صورت سادهتری درست شدهاست.
class Shape { public Int32 Height { get; set; } public Int32 Width { get; private set; } }
C++
این قابلیت را به صورت درجه یک دارا نیست ولی با راههای مختلفی میتوان آنرا شبیه سازی کرد.
#include <iostream>template <typename T> class property { T value; public: T & operator = (const T &i) { ::std::cout << i << ::std::endl; return value = i; } // This template class member function template serves the purpose to make // typing more strict. Assignment to this is only possible with exact identical // types. template <typename T2> T2 & operator = (const T2 &i) { ::std::cout << "T2: " << i << ::std::endl; T2 &guard = value; throw guard; // Never reached. } operator T const & () const { return value; }};struct Foo { // Properties using unnamed classes. class { int value; public: int & operator = (const int &i) { return value = i; } operator int () const { return value; } } alpha; class { float value; public: float & operator = (const float &f) { return value = f; } operator float () const { return value; } } bravo;};struct Bar { // Using the property<>-template. property <bool> alpha; property <unsigned int> bravo;};int main () { Foo foo; foo.alpha = 5; foo.bravo = 5.132f; Bar bar; bar.alpha = true; bar.bravo = true; // This line will yield a compile time error // due to the guard template member function. ::std::cout << foo.alpha << ", " << foo.bravo << ", " << bar.alpha << ", " << bar.bravo << ::std::endl; return 0;}
C++, Microsoft & C++Builder specific
// declspec_property.cppstruct S{ int i; void putprop(int j) { i = j; } int getprop() { return i; } __declspec(property(get = getprop, put = putprop)) int the_prop;};int main(){ S s; s.the_prop = 5; return s.the_prop;}
Dev D
class Pen{ private int m_color; // private field // public get property public int color () { return m_color; } // public set property public int color (int value) { return m_color = value; }}
auto pen = new Pen;pen.color = ~pen.color; // bitwise complement// the set property can also be used in expressions, just like regular assignmentint theColor = (pen.color = 0xFF0000);
Python
از پایتون ۲/۲ به بعد پشتیبانی شدهاست.
class Pen(object): def __init__(self): self.__color = 0 # "private" variable self.__writeonly = "You can't read this!" 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 _set_writeonly(self, new_value): self.__writeonly = new_value writeonly = property(fset = _set_writeonly) # write-only access is provided (reading throws an exception)''
pen = Pen()# accessing:pen.color = ~pen.color # bitwise complement ...print pen.writeonly # raise "AttributeError: unreadable attribute"pen.writeonly = "Something Else" # <code>__writeonly</code> is now "Something Else"print pen._Pen__writeonly
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;
F#
type Pen() = class let mutable _color = 0 member this.Color with get() = _color and set value = _color <- valueend
let pen = new Pen()pen.Color <- ~~~pen.Color
Objective C 2.0
@interface Pen : NSObject { NSColor *color;}@property(copy) NSColor *color; // color values always copied.@end@implementation Pen@synthesize color; // synthesize accessor methods.@end// Example UsagePen *pen = [Pen new];pen.color = [NSColor blackColor];float red = pen.color.redComponent;[pen.color drawSwatchInRect:NSMakeRect(0, 0, 100, 100)];
منبع
مشارکتکنندگان ویکیپدیا. « Property_(programming) ». در دانشنامهٔ ویکیپدیای انگلیسی، بازبینیشده در ۴ آپریل ۲۰۱۰.
🔥 Top keywords: مصطفی پورمحمدیمسعود پزشکیانعلیرضا زاکانیصفحهٔ اصلیسید امیرحسین قاضیزاده هاشمیسعید جلیلیمحمدباقر قالیبافناصر مکارم شیرازیویژه:جستجوتب دنگیانتخابات ریاستجمهوری ایران (۱۴۰۰)انتخابات ریاستجمهوری ایران (۱۴۰۳)دادگاه حمید نوریرده:پوزیشنهای جنسیعید قربانسید حسن قاضیزاده هاشمینامزدهای انتخابات ریاستجمهوری ایران (۱۴۰۳)سید احسان قاضیزاده هاشمیشیدا خلیقجام ملتهای اروپا ۲۰۲۴سید ابراهیم رئیسیرده:فیلمهای سکسی-کمدی آمریکاییروشهای آمیزش جنسیسید علی خامنهایلحظه گرگ و میشآمیزش جنسی بدون دخولدر انتهای شب (مجموعه نمایش خانگی ۱۴۰۳)سید حسین قاضیزاده هاشمیمریم رجویمحمود احمدینژادنفیلیمعلیاصغر پورمحمدیسکس شاپحسین انتظامیآمیزش جنسی دهانییان فن ت شیپانتخابات ریاستجمهوری ایران (۱۳۹۶)جام ملتهای اروپاناهید مسلمی