Ejendom (programmering)

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 28. februar 2014; checks kræver 12 redigeringer .

En egenskab  er en måde at få adgang til den interne tilstand af et objekt, der efterligner en variabel af en eller anden type. Adgang til en egenskab for et objekt ser det samme ud som at få adgang til et struct-felt (i struktureret programmering), men implementeres faktisk via et funktionskald. Når du forsøger at indstille værdien af ​​denne egenskab, kaldes en metode, og når du forsøger at få værdien af ​​denne egenskab, kaldes en anden metode.

Ved anvendelse af egenskaber

Typisk er en egenskab forbundet med et eller andet internt felt i et objekt. Men en egenskab er muligvis ikke forbundet med nogen objektvariabel overhovedet, selvom brugeren af ​​det pågældende objekt behandler det, som om det var et rigtigt felt.

Egenskaber øger fleksibiliteten og sikkerheden ved programmering, fordi de, som en del af en (offentlig) grænseflade, giver dig mulighed for at ændre den interne implementering af et objekt uden at ændre dets felter. Egenskaber gør det meget lettere at ændre programmet i tilfælde, hvor klassen oprindeligt blev implementeret med en overtrædelse af indkapsling , og senere var det nødvendigt at ændre den måde, hvorpå feltet tilgås. I mangel af en egenskabsmekanisme i sproget ville det være nødvendigt at søge efter og erstatte feltreferencer med accessormetoder.

Egenskabsmetoder

I mange programmeringssprog implementeres egenskaber som et par metoder : en metode, der modtager den aktuelle værdi af en egenskab, kaldes en accessor ; en metode, der sætter en ny egenskabsværdi, er en mutator . I programmeringssprog, der ikke understøtter egenskaber, såsom C++ og Java , er accessor/mutator-parret et almindeligt surrogat til at erstatte dem.

Det er sædvanligt at navngive egenskabsmetoder efter egenskabens navn med præfikserne get og set : for eksempel for Xyzzy-egenskaben ,  get_Xyzzy og set_Xyzzy ( traditionel C -stil ) eller GetXyzzy og SetXyzzy ( CamelCase -stil ). På grund af dette navneskema har slangnavnene getter og setter holdt sig til egenskabsmetoder .

Eksempler

Egenskaber i C#

Egenskaber i C# er felter med en logisk blok, der indeholder nøgleordene getog set.

Et eksempel på en klasse med en egenskab:

klasse MyClass { private int p_field ; public int Field { get { return p_field ; } privat sæt { p_felt = værdi ; } } }

Egenskaber i VB.NET

Implementeringseksempel i VB.NET. Hvis du vil implementere en skrivebeskyttet eller skrivebeskyttet egenskab , gælder ReadOnly og WriteOnly-modifikatorerne. Egenskaben kan parametreres. Det kan også være en standardegenskab, for dette skal du tilføje standardmodifikatoren

Sub Main Dim F Som Ny Foo F. _ Data = 5 F. _ Element ( 0 ) = 5 F ( 0 ) = 5 ' Skriv til konsolegenskaben . WriteLine ( F ( 0 )) 'Læs egenskab End Sub Offentlig klasse Foo Privat m_Data Som heltal Privat m_Arr () Som heltal = { 1 , 2 , 3 , 4 , 5 } Public Property Data As Integer Set ( Value As Integer ) 'Setter m_Data = Value End Set Get Return m_Data 'Getter End Get End Property Public Default Property Item ( Param As Integer ) As Integer ' Standard parameteriseret egenskab Sæt ( Value As Integer ) m_Arr ( Param ) = Value End Set Get Return m_Arr ( Param ) End Get End Property End Class

Ejendomme i Delphi

En ejendom i Delphi er beskrevet med ordet property.

Et eksempel på en klasse med en egenskab:

TMyClass = klasse privat FMyField : Heltal ; procedure SetMyField ( const Value : Integer ) ; funktion GetMyField : Heltal ; public property MyField : Heltal læs GetMyField skriv SetMyField ; ende ; funktion TMyClass . GetMyField : Heltal ; start Resultat := FMyField ; ende ; procedure TMyClass . SetMyField ( const Value : Integer ) ; start FMyField := Værdi ; ende ;

Egenskaber i ActionScript

klasse MyClass { privat _foo : int ; public function get foo () : int { return _foo ; } offentlig funktionssæt foo ( foo : int ) : void { _foo = foo ; _ } }

Egenskaber i mål C

@interface Firma  : NSObject { NString * var_navn ; } @property ( behold ) NSString * var_navn ; @ende @implementeringsfirma _ @synthesize var_navn ; @ende

Ejendomme i Ruby

Ejendomserklæringer i Ruby adskiller sig ikke fra metodedeklarationer. For at oprette en varighedsegenskab for Song-klassen skal du for eksempel beskrive metoderne varighed og varighed=(værdi)

klasse Sang def varighed @varighed slut def varighed= ( værdi ) @varighed = værdi slut slut

En simpel adgang til en intern objektvariabel kan dog erstattes af et kald til metoden attr_accessor :duration

klasse Sang attr_accessor :varighed slut

Mere interessant er eksemplet med at oprette en egenskab duration_in_minutes, der returnerer eller indstiller varighedstiden i minutter:

klasse Sang def duration_in_minutes @duration / 60 . 0 slut def duration_in_minutes= ( værdi ) @varighed = ( værdi * 60 ) . to_i ende ende

Ændring af egenskaben duration_in_minutes vil dog påvirke varighedsegenskaben. For eksempel

sang = sang . ny sang . varighed_i_minutter = 1 . 2 trykte sange . varighed # udskrives 72

Egenskaber i Python

Et sæt metoder med dekoratører definerer, hvordan man arbejder med en ejendom (læse, skrive, slette). Hvis nogen af ​​metoderne fjernes (med undtagelse af @property), mistes muligheden for at arbejde med ejendommen på den passende måde.

Et eksempel på en klasse med en egenskab:

klasse A : def __init__ ( selv ): selv . __x = Ingen @property def x ( selv ): returner selv . __x @x . setter def x ( selv , værdi ): selv . __x = værdi @x . slette def x ( selv ): selv . __x = Ingen >>> a = A () >>> a . x >>> a . x = 2 >>> a . x 2 >>> del en . x >>> a . x >>>

Se også