Jeg har lavet alle opgaverne til denne video og har derfor et spørgsmål jeg gerne vil have afklaret (set og get er først ved at hænge lidt fast nu).
Jeg har lavet denne bog klasse:
private String favoritBog;
public void SetfavoritBog(String favoritBog)
{
this.favoritBog = favoritBog;
}
public String GetfavoritBog()
{
return favoritBog;
}
public void PrintBogInfo()
{
Console.WriteLine("Favorit bog: " + GetfavoritBog());
//Console.WriteLine("Favorit bog: " + favoritBog)
Console.ReadLine();
}
I opgave 6 hvor man skal lave den metode til PrintInfoBook hvad er forskellen på om man skriver GetfavoritBog() eller favoritBog? Jeg får 100% samme resultat når jeg tester uanset om jeg skriver det ene eller andet.
Video 18: enkelt spørgsmål
Re: Video 18: enkelt spørgsmål
Da du foretager kaldet inde i klassen selv, er der ingen forskel. Feltet har du gjort 'private', hvilket vil sige det kun kan ses af klassen selv. Havde du derimod lavet en konstruktør, instanstieret et objekt af denne type i en anden klasse og forsøgt at kalde feltet direkte, vil du få en fejl - men ikke med din getter, da den er public.Nico86dk skrev: I opgave 6 hvor man skal lave den metode til PrintInfoBook hvad er forskellen på om man skriver GetfavoritBog() eller favoritBog? Jeg får 100% samme resultat når jeg tester uanset om jeg skriver det ene eller andet.
For at løse dette, kunne du så gøre dit felt 'public', og så ville begge ting igen returnere det samme, uanset hvor du kalder det fra, men det er ikke anbefalet.
Det er (så vidt jeg har forstået) generelt anset som værende mere korrekt at deklarere felter private og lave getter/setter-metoder. Jeg tror eksempelvist grunden er, at hvis du en dag ændrer feltets variabel-type, så vil du muligvis(!) få fejl alle de steder hvor du har kaldet feltet direkte.
Hvis du derimod har lavet en getter, og besluttet dig for at uanset hvilken variabel du har med at gøre, så skal der i sidste ende trækkes en string ud af den (eksempelvis hvis dit private felt er en anden klasse), så behøver du kun rette det i klassen selv (i getter-metoden), og alle de steder i din kode hvor du er afhængig af hvad klassen returnerer, vil stadig fungere som ønsket. Samme gælder for setter-metoder, hvor du måske en dag får brug for at gøre mere ved din data, inden du 'sætter' værdien af det private felt til noget nyt - så skal det kun gøres i setteren, og ikke alle de steder hvor du ellers ville kalde "object.field = xxx;"
Jeg ved ikke helt hvordan man kan forklare det smart, men der er en række gode svar i den her tråd omkring det ellers:
http://stackoverflow.com/questions/1568 ... nd-setters
Re: Video 18: enkelt spørgsmål
Tak for svaret Jeppe. Jeg prøver stadig, at tyde svaret for 100% mening, men tror jeg er nogenlunde med på hvad du mener.
Sådan som jeg har skrevet koden er det fulgt 100% som det er anvist i videoer, så jeg satser ikke på at der er lavet nogle fejl.
I min Main har jeg følgende kode:
static void Main(string[] args)
{
Person batman = new Person(); // Objektet Person laves med ref.variabel batman.
// Opg 4 & 5
Bog sherlockHolmes = new Bog();
// Opg 3
batman.Setnavn("Bruce Vayne");
batman.Setalder(30);
batman.Setpenge(9999999999);
batman.PrintInfo();
// Opg 4, 5 & 6
sherlockHolmes.SetfavoritBog("Sherlock Holmes - Nattens Skygger");
sherlockHolmes.PrintBogInfo();
}
Er der noget jeg kunne have gjort anderledes, eller er tingene nu bare en gang som jeg beskrev i først indlæg?
På forhånd tak.
Sådan som jeg har skrevet koden er det fulgt 100% som det er anvist i videoer, så jeg satser ikke på at der er lavet nogle fejl.
I min Main har jeg følgende kode:
static void Main(string[] args)
{
Person batman = new Person(); // Objektet Person laves med ref.variabel batman.
// Opg 4 & 5
Bog sherlockHolmes = new Bog();
// Opg 3
batman.Setnavn("Bruce Vayne");
batman.Setalder(30);
batman.Setpenge(9999999999);
batman.PrintInfo();
// Opg 4, 5 & 6
sherlockHolmes.SetfavoritBog("Sherlock Holmes - Nattens Skygger");
sherlockHolmes.PrintBogInfo();
}
Er der noget jeg kunne have gjort anderledes, eller er tingene nu bare en gang som jeg beskrev i først indlæg?
På forhånd tak.
Re: Video 18: enkelt spørgsmål
Jeg har lige kigget på opgaverne, og jeg tror lige du skal kigge lidt mere på det.
I sidste ende tror jeg du skal ende ud med 2 klasser, hhv. Book og Person.
I din Person-klasse, skal der udover alder, navn og pengebeholdning være et felt der hedder favoriteBook, som skal være af typen Book (øvelse 4 - rigtig vigtigt) - tænk på, at en person har en yndlingsbog.
Nu vil jeg ikke give dig hele svaret, men skriv hvis det giver problemer.
I sidste ende tror jeg du skal ende ud med 2 klasser, hhv. Book og Person.
I din Person-klasse, skal der udover alder, navn og pengebeholdning være et felt der hedder favoriteBook, som skal være af typen Book (øvelse 4 - rigtig vigtigt) - tænk på, at en person har en yndlingsbog.
Nu vil jeg ikke give dig hele svaret, men skriv hvis det giver problemer.
Re: Video 18: enkelt spørgsmål
Så har jeg kigget på opgaverne igen, og har fulgt videoen slavisk - har vist givet nogle lidt andre navn men det er vel underordner?!
Er jeg stadig helt fra den eller ser det mere fornuftigt ud?
Således ser mit program.cs ud:
namespace Video18_ReferncerVersion2
{
class Program
{
static void Main(string[] args)
{
Person batman = new Person();
batman.Setnavn("Bruce Vayne");
batman.Setalder(30);
batman.Setpenge(9999999999);
batman.PrintInfo();
Bog favoritBog = new Bog();
favoritBog.Settitle("Sherlock");
batman.SetsBog(favoritBog);
batman.PrintBogInfo();
}
}
}
Person klasse:
namespace Video18_ReferencerVersion2
{
class Person
{
private String navn;
private int alder;
private double penge;
Bog yndlingsBog;
public void Setnavn(String navn)
{
this.navn = navn;
}
public String Getnavn()
{
return navn;
}
public void Setalder(int alder)
{
this.alder = alder;
}
public int Getalder()
{
return alder;
}
public void Setpenge(double penge)
{
this.penge = penge;
}
public double Getpenge()
{
return penge;
}
public void SetsBog(Bog yndlingsBog)
{
this.yndlingsBog = yndlingsBog;
}
public Bog GetyndlingsBog()
{
return yndlingsBog;
}
public void PrintInfo()
{
Console.WriteLine("[Personinformation]:");
Console.WriteLine("Navn: " + navn);
Console.WriteLine("Alder: " + alder);
Console.WriteLine("Penge til rådighed: " + penge + "kr.");
}
public void PrintBogInfo()
{
if (yndlingsBog != null)
Console.WriteLine("Favoritbogen er: " + yndlingsBog.Gettitle());
else
Console.WriteLine("Ingen favoritbog!");
}
}
}
og bog klassen:
namespace Video18_ReferncerVersion2
{
class Bog
{
private String title;
public void Settitle(String title)
{
this.title = title;
}
public String Gettitle()
{
return title;
}
}
}
Er jeg stadig helt fra den eller ser det mere fornuftigt ud?
Således ser mit program.cs ud:
namespace Video18_ReferncerVersion2
{
class Program
{
static void Main(string[] args)
{
Person batman = new Person();
batman.Setnavn("Bruce Vayne");
batman.Setalder(30);
batman.Setpenge(9999999999);
batman.PrintInfo();
Bog favoritBog = new Bog();
favoritBog.Settitle("Sherlock");
batman.SetsBog(favoritBog);
batman.PrintBogInfo();
}
}
}
Person klasse:
namespace Video18_ReferencerVersion2
{
class Person
{
private String navn;
private int alder;
private double penge;
Bog yndlingsBog;
public void Setnavn(String navn)
{
this.navn = navn;
}
public String Getnavn()
{
return navn;
}
public void Setalder(int alder)
{
this.alder = alder;
}
public int Getalder()
{
return alder;
}
public void Setpenge(double penge)
{
this.penge = penge;
}
public double Getpenge()
{
return penge;
}
public void SetsBog(Bog yndlingsBog)
{
this.yndlingsBog = yndlingsBog;
}
public Bog GetyndlingsBog()
{
return yndlingsBog;
}
public void PrintInfo()
{
Console.WriteLine("[Personinformation]:");
Console.WriteLine("Navn: " + navn);
Console.WriteLine("Alder: " + alder);
Console.WriteLine("Penge til rådighed: " + penge + "kr.");
}
public void PrintBogInfo()
{
if (yndlingsBog != null)
Console.WriteLine("Favoritbogen er: " + yndlingsBog.Gettitle());
else
Console.WriteLine("Ingen favoritbog!");
}
}
}
og bog klassen:
namespace Video18_ReferncerVersion2
{
class Bog
{
private String title;
public void Settitle(String title)
{
this.title = title;
}
public String Gettitle()
{
return title;
}
}
}
Re: Video 18: enkelt spørgsmål
Det ser rigtigt ud, idét:Nico86dk skrev:Så har jeg kigget på opgaverne igen, og har fulgt videoen slavisk - har vist givet nogle lidt andre navn men det er vel underordner?!
Er jeg stadig helt fra den eller ser det mere fornuftigt ud?
Kode: Vælg alt
batman.SetsBog(favoritBog);
Kode: Vælg alt
Bog favoritBog = new Bog();
favoritBog.Settitle("Sherlock");
OBS: Når du for fremtiden indsætter kode her på siden, så benyt den knap der hedder "Code" og indsæt din kode mellem de 2 'klammer': [ code] kode her.. [ /code]
Re: Video 18: enkelt spørgsmål
Mange tak for responsen og for at guide mig i den rigtige retning. Det lykkedes til sidst, at få det at fungere.
Skal nok huske at bruge kodeknappen fremover, det er en tanketorsk af mig da jeg ikke er så kendt i disse kredse.
Skal nok huske at bruge kodeknappen fremover, det er en tanketorsk af mig da jeg ikke er så kendt i disse kredse.