webForumDet fria alternativet

Använda publik eller privat property

.NET

6 svar · 653 visningar · startad av doggelito

Medlem sedan juni 20003 076 inlägg
Frågan#1

En liten rookiefråga så här på eftermiddagen! :stud
Ska man använda den privata eller publika propertyn i sin kod?

private string blabla = "hejhej";
public string Blabla
{
     get { return blabla; }
     set { blabla = value; }
}

protected void Page_Load(object sender, EventArgs e)
{
     if(blabla.Equals("hejhej"))...

     if(Blabla.Equals("hejhej"))...
}
Medlem sedan juni 20008 205 inlägg
#2

Normalt brukar man rekommendera att man använder propertyn och inte fältet bakom, i ditt fall alltså "Blabla" och inte "blabla". Har man någon form av valideringskod i settern vill man inte av misstag sätta den till något trasigt värde (det kan bli marginellt långsammare, men om JITen är lite smart borde triviala get/set-metoder inlinas). I C# 3 finns det ju till och med stöd för att slippa ange det bakomliggande fältet:

public string Blabla { get; set; }

Gör man på det viset behöver man inte fundera över vad man ska använda :)

red. Klargörande av terminologi: I ditt fall är "blabla" ett fält och "Blabla" är en property. En property har egentligen inget eget värde, utan är ett standardiserat sätt att ange metoder som hämtar och/eller sätter värden (antingen direkt på fält eller på andra properties). I ditt fall blir propertyn Blabla två metoder:

public string get_Blabla  { return blabla; }
public void set_Blabla(string value) { blabla = value; }
Medlem sedan juni 20003 076 inlägg
#3

Många tack spango! Då har jag lite bättre koll på läget! :)

Medlem sedan jan. 20022 440 inlägg
#4

Mycket bra förklaring, jag ska genast ta bort alla mina privata fält :)

Medlem sedan juni 20003 076 inlägg
#5

Ta inte bort dem som du satt defaultvärden på bara! Om du använder sådana. :bire

Medlem sedan jan. 20022 440 inlägg
#6

Nej då, jag brukar skilja på dom med

#region

men tack för påminnelsen! :birp

Medlem sedan aug. 20003 575 inlägg
#7

Jag vet inte om jag gillar "auto-properties", i många fall vill man ändå ha funktionalitet i propertyn som t.ex. ett OnPropertyChanged("Name") anrop, lazyloading funktionalitet och lite annat smått och gått. Och om man då blir sittandes med några auto-properties och några vanliga properties så blir det inte konsekvent och sådant tycker jag inte är så bra.

Har man saker grupperat så tycker jag inte det gör så mycket med de vanliga properties som finns.

253 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)