Nytt i forumet
Senaste privatannonserna
Prylar säljes, köpes, bytes och skänkes
| 2012-04-17, 10:20 | #1 |
ande85Medlem Registrerad: jun 2004 |
Lägga till get set metod i class
Hej,
Antagligen dum fråga detta men jag försöker lägga till en extra get set-metod i en class, men då vill det inte fungera. Klassen är uppbyggd på följande sätt; using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.Web.Script.Serialization;
namespace a
{
[Serializable]
public class A
{
public A() { }
public string metod1{ get; set; }
public string metod2{ get; set; }
public string metod3{ get; set; }
public string metod4{ get; set; }
public string metod5{ get; set; }
}
}
|
|
|
| 2012-04-17, 10:32 | #2 |
XerbeeMedlem Plats: 42 Registrerad: maj 2004 |
Det hjälper att skriva vilket språk det rör sig om, tips är att sätta [C#] i topic t.ex
Skriv gärna kod innanför [.code] [./code] taggar (utan punkten) för att få med indentering. Det verkar råda en viss förvirring då det du kallar metod1-5 är properties av typen string. Men menar du att koden du klistrat in fungerar men lägger du till en public string metod6{ get; set; }
|
|
|
| 2012-04-17, 10:34 | #3 |
ande85Medlem Registrerad: jun 2004 |
Citat:
Nä det fungerar inte, funderar på om det kan ha att göra med att Serializable används? Jag har alltså inte gjort koden från grunden utan metod 1-5 fanns från början och jag skulle behöva lägga till ytterligare en metod. |
|
|
| 2012-04-17, 10:38 | #4 |
XerbeeMedlem Plats: 42 Registrerad: maj 2004 |
Citat:
public int GetRandom() {return 3;}
http://msdn.microsoft.com/en-us/library/bb384054.aspx |
|
|
| 2012-04-17, 13:07 | #7 |
havsmonstretMedlem Plats: Helsingborg Registrerad: apr 2010 |
Det är inte metoder du har där utan properties. Ska du lägga till en riktig metod ska den ligga utanför konstruktorn:
public class Test {
public Test() { //Konstruktorn
}
public int Method(int x, int y) { //Metod
return x + y;
}
}
Senast redigerad av havsmonstret 2012-04-17 klockan 13:08. |
|
| 2012-04-17, 13:49 | #8 |
morphman86Medlem Plats: Göteborg Registrerad: apr 2009 |
Citat:
public class A
{
public A() { }<- Kolla här, konstruktorn är tom!
public string metod1{ get; set; }
public string metod2{ get; set; }
__________________
Stationär: Processor: Intel i5 3.2GHz, RAM: 4Gb, Grafikkort: ATI Radeon HD 5850, OS: Windows 7 Proffessional x64 Laptop: ASUS K53E, Processor: Intel i5 2450M, RAM: 4Gb, Grafik: Integrerad Intel GMA HD, OS: Win7 Home Premium x64 och Xubuntu 10 |
|
|
| 2012-04-17, 14:16 | #9 |
havsmonstretMedlem Plats: Helsingborg Registrerad: apr 2010 |
Citat:
Är dock fortfarande viktigt o skilja på metoder och properties. |
|
| 2012-04-17, 15:32 | #11 |
GFrostMedlem Plats: Göteborg Registrerad: okt 2010 |
Det är inte att rekommendera att använda properties när man skall komma åt data som inte hanteras i programmet tex kopplingar mot databas, server, nätverksåtkomst etc. Saker som lätt kan genera exceptions så är det bättre att använda metoder.
|
|
|
| 2012-04-17, 15:33 | #12 |
NickoBMedlem Plats: Jönköping Registrerad: maj 2011 |
Citat:
Jag ser fyra möjliga lösningar på detta: 1) Använda get/set direkt (string attr { get; set; }, arbetar som ett publikt attribut då) 2) Använda get/set som metod (set ex. 2). 3) Använda get som metod (se ex. 3), och set som metod (se ex. 4). 4) Separera till två olika metoder som Elgot skrev. Ex. 2 public string method1
{
get {
return attribute1;
}
set {
if (value ... blablabla, lokik osv)
attribute1 += value;
}
}
public string get_method1
{
get {
return attribute1;
}
}
public string set_method1
{
set {
if (value ... blablabla, lokik osv)
attribute1 += value;
}
}
Jag vet inte med er. Men get/set ger renare kod ibland än vad man skulle få av en metod. Och det finns en logisk anledning varför Microsoft lade till detta i C#. Att använda get/set, ger programmeraren möjligheten att fortfarande ha kontroll över vad som läses/skrives från/till attributet. Så get/set fungerar fortfarande som metoder och hindrar andra objekt från att göra felaktiga modifieringar av attributet. Ta det såhär, vilket är snyggast att kalla, och ger minst kod som det kan bli fel med: nåttX = objektet.get_X();
nåttX = objektet.X;
objektet.set_X("nytt värde");
objektet.X = "nytt värde";
Däremot i detta fallet, används get/set utan någon form av datavalidering, och blir då som att använda ett publikt attrubut. Men! Om programmerarna senare skulle besluta att lägga till validering, så kommer bara koden i denna klassen behöva justeras, och ingen annan stans. |
|
|
| 2012-04-17, 15:40 | #13 |
havsmonstretMedlem Plats: Helsingborg Registrerad: apr 2010 |
Citat:
Citat:
|
|
| 2012-04-17, 16:00 | #14 |
NickoBMedlem Plats: Jönköping Registrerad: maj 2011 |
Citat:
Det är ändå ett sätt som gör så man inte direkt kommer åt ett attribut i klassen, utan att behöva skapa en vanlig metod för det. Vilket medför att attributet är inkapslat, och get/set metoden förblir en metod som kallas för att komma åt/modifiera attributet indirekt om man så vill. Som jag skrev. Mindre kod att skriva (även om det bara är () som tas bort), vilket underlättar vid kodning/uppdateringar. Man ska särskilja, så man inte har publika attribut i en klass. Men get/set metoderna underlättar ändå kodningen. |
|
|
Redaktionens senaste nyhetsrubriker
Prylar säljes, köpes, bytes och skänkes