webForumDet fria alternativet

problem med set/get

7 svar · 505 visningar · startad av smyken

smykenMedlem sedan feb. 200336 inlägg
#1

Hej på er
Håller på att lära mig oop så smått och/men stöter på problem mest hela tiden. Beroende på användarens val får jag ett värde från en funktion. Det värdet vill jag stoppa in i en klassegenskap (i set) och sedan hämta det från en annan funktion (från get).
Den senare delen får jag att fungera, dvs att hämta värdet från get (om jag hårdkodar den privata variabeln), men jag lyckas inte sätta värdet i set (att ge den privata variabeln värdet).

Har följande kod:

[I]// Funktion1, bestämmer "mittvärde" och skickar det till klassenSet_SavePath[/I] 
public void getSelected (Object sender, EventArgs e) {
        if (val1.Checked) {
        Set_SavePath obj1 = new Set_SavePath(); [I]// Instansierar obj1[/I]
        obj1.Savepath = "mittvärde";  [I]// skickar värdet till set[/I]
        }
        ....
[I]// Klassen Set_SavePath som mellanlagrar "mittvärde"[/I]
public class Set_SavePath
    {
    private string savepath;
    public string Savepath
        {
            get
            {
                return savepath;
            }
            set
            {
                savepath = value;
            }
      }  }

// [I]Funktion2, använder värdet från get [/I]
    private void btnUpload_Click (Object sender, EventArgs e) {
        try
            {
            Set_SavePath obj3 = new Set_SavePath (); [I]// instansierar obj3[/I]
            string t = obj3.Savepath;  [I]// Hämtar "mittvärde" från get[/I]

            string strFileName = MyFile.PostedFile.FileName;
            strFileName = System.IO.Path.GetFileName(strFileName);
            MyFile.PostedFile.SaveAs(Server.MapPath (t + strFileName));
           .....

Har jag helt missförstått det hela?!

emissionMedlem sedan dec. 19996 721 inlägg
#2

Du skapar ett nytt objekt, och på raden under hämtar du ett värde från det samma

Set_SavePath obj3 = new Set_SavePath (); // instansierar obj3
string t = obj3.Savepath;

Värdet på SavePath är därför tomt. obj1 och obj3 har inget med varandra att göra.

JosefMedlem sedan mars 20023 561 inlägg
#3

Varför har du en klass till det egentligen? Det går ju lika bra att använda this.SavePath och då behöver du ju inte klassen.

mozillaMedlem sedan juli 20011 084 inlägg
#4

en liten instickande fråga, kan man använda overloads på en property? Som med en funktion? dvs:

public string namnet {
  ...
}
public bool namnet {
  ...
}

Vad jag vill åstadkomma är att man skall kunna skicka med antingen en text eller "false" för att "disable" texten.

JosefMedlem sedan mars 20023 561 inlägg
#5

mozilla: Borde inte det där gå allderles utmärkt med Generics (v2.0).
Vet inte hur det är i 1.1:an.

emissionMedlem sedan dec. 19996 721 inlägg
#6

mozilla skrev:

en liten instickande fråga, kan man använda overloads på en property?

Nej, tyvärr. Anledningen är dock rätt enkel. En property exponeras precis som ett fält och dessa kan ju bara ha sin egen datatyp. Dessutom skulle det bli enormt knepigt om man hade både en setter och en getter, där settern kan ta flera datatyper. Gettern kan ju, per definition, endast returnera en datatyp, så vilken skulle det bli?

Den förändring som kommit till C# 2.0 är att man kan ha olika accessnivå (private, protected etc) på getter och setter. Det var på tiden.

GladhMedlem sedan maj 20012 812 inlägg
#7

Den förändring som kommit till C# 2.0 är att man kan ha olika accessnivå (private, protected etc) på getter och setter. Det var på tiden.

Har lite svårt att se vilken vinst du har ha det. En property är ju en property för att man skall kunna komma åt den, ingen större vinst med att ha den private.

Visst du kan kanske samla upp lite logik i din property som gör lite kontroller innan du sätter värdet på din variabel även om du inte vill att den skall vara public, men hur vanligt är det?

- M

emissionMedlem sedan dec. 19996 721 inlägg
#8

Gladh skrev:

Har lite svårt att se vilken vinst du har ha det. En property är ju en property för att man skall kunna komma åt den, ingen större vinst med att ha den private.

Absolut inte, men däremot kan det vara vettigt att ha en public getter och en protected/internal setter.

124 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)