webForumDet fria alternativet

Vad är syftet med property?

.NET

7 svar · 537 visningar · startad av Compusa

Medlem sedan jan. 20023 327 inlägg
Frågan#1

Jag kommer från Java-världen och kan inte påminna mig om att detta syntax finns där. Vad jag har förstått så använder man properties för att på ett enklare sätt skriva get/set-metoder på klass-attribut?

//ett sätt att använda property i C#
public int Myval
{
    get
    {
         return myval;
    }
    set
    {
    myval = value;
    }
}

// ett ännu enklare sätt i C#
 public int property Myval
{
get;
set;
}

// motsvarar i java
public int getMyval() {
    return myval;
}

public void setMyval(int newValue) {
    myval = newValue;
}

Här jag uppfattat det hela rätt? Hur anropar man set i en property, dvs om man vill sätta/ändra värdet i denna variabel av objektet. Vilket av följande syntax rekommenderar ni att man använder?

Medlem sedan maj 20018 027 inlägg
#2

Set anropar du med exempelvis:

objekt.Myval = 8

om det nu är 8 du vill sätta värdet till. Det ser helt enkelt ut som att du sätter en egenskap rakt av, när du i själva verket låter en metod få ta hand om saken under ytan, och kanske eventuellt göra vissa kontroller av vad du sätter.

Medlem sedan jan. 20023 327 inlägg
#3

Okej så det är med andra ord mer eller mindre standard att använda sig av properties iställer för "klassiska" get/set-metoder? Ett sätt att göra det enklare för programmeraren?

Medlem sedan feb. 20013 023 inlägg
#4

Compusa skrev:

Okej så det är med andra ord mer eller mindre standard att använda sig av properties iställer för "klassiska" get/set-metoder? Ett sätt att göra det enklare för programmeraren?

Tja, i bl a VB är det standard. En van vb-programmerare tycker att det är jättebra. En van javaprogrammerare tycker kanske att properties är som kejsarens nya kläder.

Medlem sedan dec. 19996 721 inlägg
#5

Compusa skrev:

Okej så det är med andra ord mer eller mindre standard att använda sig av properties iställer för "klassiska" get/set-metoder? Ett sätt att göra det enklare för programmeraren?

Ja, det är mer eller mindre standard, och syftet är att egenskaper ska se ut som jus....egenskaper. Det finns dock många tillfällen då man bör använda get-/set-metoder i stället. Det mest är förstås en fråga om tycke och smak, men jag tycker följande:

1. Undvik writeonly-egenskaper (endast set, ingen get). Det är inte rimligt att ett objekt har en egenskap som endast kan sättas. Använd en ensam SetBlaBla i stället.

2. Två direkt påföljande hämtningar från en get-egenskap (vissa arter kan klättra i berg) ska ge samma värde.

3. En get direkt efter en set, bör helst ge tillbaka samma värde som man satte.

4. Det får finnas någon måtta på hur mycket som händer bakom kulisserna på ett par egenskaper. De är trots allt bara egenskaper, och ska upplevas som sådana.

Som kuriosa kan nämnas att get-/set-egenskaperna i .NET faktiskt inte "finns på riktigt" utan bara i klassernas metadata. I själva verket skapas riktiga get-/set-metoder.

Ex:

public int Age
{
   get{return _age;}
   set{_age=value;}
}

blir efter kompilering två dolda metoder (de kan anropas via Reflection, om man tycker det är roligt)

public int get_Age()
{
   return _age;
}
public void set_Age(int value)
{
   _age=value;
}

Compusa skrev:

// ett ännu enklare sätt i C#
 public int property Myval
{
get;
set;
}

Nja, så enkelt kan man inte göra det :)

Medlem sedan jan. 20023 327 inlägg
#6

emission skrev:

Nja, så enkelt kan man inte göra det :)

Hittade kodexemplet här: http://www.c-sharpcorner.com/Code/2002/Dec/SimpleCSProperties.asp

Missade dock det lilla ordet inom parantes i artikelns rubrik:
"Alternative Simplified C# Property Syntax ( Proposal) :L

Medlem sedan dec. 19996 721 inlägg
#7

Compusa skrev:

Hittade kodexemplet här: http://www.c-sharpcorner.com/Code/2002/Dec/SimpleCSProperties.asp

Missade dock det lilla ordet inom parantes i artikelns rubrik:
"Alternative Simplified C# Property Syntax ( Proposal) :L

Ett ovanligt ogenomtänkt förslag... :)

Medlem sedan jan. 20012 204 inlägg
#8

Angränsar till ämnet på ett annat sätt : http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox_p.html

Nämligen att användningen av set/get/properties inkränktar på inkapslingen, vilket ur OO synpunkt inte är speciellt bra.

Trots att det är java så är det rikigt intressant läsning!

260 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)