Avatar billede jps6kb Novice
14. april 2010 - 09:52 Der er 23 kommentarer og
1 løsning

Get og Set

Hey,

Jeg har et problem - jeg kan ikke lave 3.0 accessor-methods.

private string name;
public string Name { get; set; }

Virker ikke... men hvis jeg laver "gammeldags" metoder:
public string Name { get{return name;} set{name = value;} }

Så virker det fint.

Jeg har .NET 3.5 installeret. Any ideas?
Avatar billede Spotgun Seniormester
14. april 2010 - 10:08 #1
Har du targeted 3.5 frameworket i dit projekt?
Avatar billede jps6kb Novice
14. april 2010 - 10:11 #2
Hvorledes mener du?
Avatar billede Spotgun Seniormester
14. april 2010 - 10:30 #3
Hvis du bruger Visual Studio kan man vælge hvilken udgave af .NET frameworket man vil udvikle op mod. Det kan naturligvis give problemer hvis du ønsker at bruge funktioner fra 3.5 frameworket, men udvikler op mod 2.0.

Åbn dit projekt i Visual Stduio, højreklik på projektet og vælg Properties. Find punktet Application. Her kan du ændre "Target Framework" til en anden version.

...Men det er nu blot et bud. Det kan jo være der er noget andet galt, eller du ikke bruger Visual Studio :)
Avatar billede Syska Mester
14. april 2010 - 10:30 #4
Properties for dit projekt ... -> Application -> Target Framework

mvh
Avatar billede jps6kb Novice
14. april 2010 - 10:39 #5
Ahh dér. Den står til 3.5 - og jeg bruger VS2008 Pro.
Avatar billede bvli Praktikant
14. april 2010 - 11:08 #6
hvad får du af fejl?
Avatar billede jps6kb Novice
14. april 2010 - 11:12 #7
Jeg får ingen fejl - den henter bare ikke værdierne.
Jeg har forsøgt at gøre variablerne public og de er sat... men get; returnerer bare ikke noget/blank.
Avatar billede Syska Mester
14. april 2010 - 11:29 #8
Tror du bliver nød til at komme med noget kode som ikke virker for at vi kan komme videre :-)

mvh
Avatar billede jps6kb Novice
14. april 2010 - 11:34 #9
private string name;

public MyClass(string name)
{
    this.name = name;
}

public string Name
{ get; set; } // Det virker ikke

---
---

public string Name
{ get { return name; } set { name = value; } } // Det virker
Avatar billede Spotgun Seniormester
14. april 2010 - 11:38 #10
name og Name er jo to forskellige variabler.
Avatar billede Syska Mester
14. april 2010 - 11:41 #11
:-)

Jeg ikke jeg kan være mere enig med spotgun.

Tror jps6kb sidder og slår alt hår ud af hovedet nu :-)

mvh
Avatar billede jps6kb Novice
14. april 2010 - 11:42 #12
Det er det, men Name vil jo læse name i den kontruktion der.
Umiddelbart vil jeg tro, at problemet er, at C# versionen ikke følger med .NET?
Avatar billede Syska Mester
14. april 2010 - 11:43 #13
ja, og grunden til at løsning med en private setter er at der har din klasse en en variable "name" ...

mvh
Avatar billede jps6kb Novice
14. april 2010 - 11:43 #14
Hehe... det gør jeg ikke - altså, det har da altid virket?
Har lige fundet et eksempel - ca. midt på siden.
http://www.acceptedeclectic.com/2007/11/c-short-hand-tricks.html

Er det mig der er helt fra den? :)
Avatar billede jps6kb Novice
14. april 2010 - 11:45 #15
Altså, jeg har jo min private string name hele tiden.
Det er bare get; set; der ikke virker... get { return name;} virker fint...?
Avatar billede Syska Mester
14. april 2010 - 11:56 #16
Nej, this.name = name;

Laver en assign til sig selv ...

public string Name {get; set;} bliver aldrig assigned til.

mvh
Avatar billede Syska Mester
14. april 2010 - 11:59 #17
Ja, men grunden til at det virker med et backing field.

Er at "this.name" henviser til klassens "name" field og "name" henviser til din constructor parameter.

mvh
Avatar billede jps6kb Novice
14. april 2010 - 12:29 #18
Ohh - så jeg kan altså ikke lave en konstruktør som sætter værdierne i den? Eller, jo så skal jeg lave noget med...

public Foo(string name)
{
    Name = name;
}

??
Avatar billede Syska Mester
14. april 2010 - 12:33 #19
præcis ....

Du kan kun lave det på den anden måde hvis du også har et backing field som hedder name og du bruger this.name = name.

mvh

og svar
Avatar billede jps6kb Novice
14. april 2010 - 12:35 #20
Jamen se - det var jo bare det jeg havde misset - det er sgu også noget bøvl alt sammen. Hehe.. tak for det - smider du point?
Avatar billede jps6kb Novice
14. april 2010 - 12:36 #21
Baah - eller jeg kunne bruge det svar du havde lagt... hehe... fortsat god dag.
Avatar billede Syska Mester
14. april 2010 - 12:42 #22
hehe, kan også godt lide du skriver "Smider du point?" :-)

Fortsat god dag til dig ... og håber det alt sammen kommer til at virke.
Avatar billede Syska Mester
14. april 2010 - 12:53 #23
spotgun-> Vi deler point, da du kom med svar på hans problem først og jeg uddybede hvorfor ...

http://www.eksperten.dk/spm/907031

mvh
Avatar billede arne_v Ekspert
15. april 2010 - 02:51 #24
For lige at pinde det lidt ud.

public string Name { get; set; }

bruger et felt bagved.

Men de bruger ikke det af brugeren oprettede:

private string name;

men derimod sin egen:

private string <Name>k__BackingField;

og de to felter har naturligvis ikke noget med hinanden at gøre.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester