Hej! En konstruktor kan inte returnera något värde, det funkar så som du har gjort men jag skulle rekommendera att om du "inkapslar" din Tack för ditt svar! Egenskaper i C# är väldigt smidigt och ger dig större kontroll på tilldelning (sätta värdet på variabeln) och avläsning. I exemplet som jag skrev ovan så skulle du inte kunna göra så här: Tjena Johan! om du har en klass som representerar en zip code, varför ha en egenskap i klassen då som gör samma sak?? Känns inte OOP, gör en override på ToString istället: Tack för tipset Patrik!Konstruktor i C#
Vet inte riktigt hur jag ska formulera min fråga eftersom jag inte är så vass på C# men jag försöker:
Jag har skapat en klass som ska formatera Postnummer och när man instantierar ett objekt från denna klass så ska man skicka med postnummer och en landskod.
Jag instantierar objektet så här:
<code>
ZipCode0 postNummer = new ZipCode0(txtZipCode.Text, selectedCountry);
</code>
Klassen ser ut så här:
<code>
using System;
namespace WebApplication1.Classes
{
/// <summary>
/// Testar lite bara...
/// </summary>
public class ZipCode0
{
public string zipCode;
public ZipCode0(string zipCode, Country country) {//Konstruktor - ta emot postnummer och Contry-värde
zipCode = zipCode.Replace(" ",string.Empty);
switch(country) {
case Country.Sweden:
zipCode = zipCode.Insert(3," ");//lägg in mellanslag på pos 3
zipCode = "SE-" + zipCode;//lägg till landskod
break;
case Country.Norway:
zipCode = "NO-" + zipCode;
break;
}
this.zipCode = zipCode;//värde som returneras till objektet. Är det så man gör????
}
}
}
</code>
Jag hade länge problem med att få "tillbaka" något när jag skapade detta objekt. Det enda som returnerades ut var ett kvalificerat namn på klassen ZipCode0.
Efter lite trixande så fick jag till det genom att i konstruktorn skriva:
<code>
this.zipCode = zipCode;
</code>
Detta funkar - men tänker jag rätt?
Mvh,
FredricSv: Konstruktor i C#
<code>
public string zipCode
</code>
som en egenskap enligt
<code>
private string zipCode;
public string ZipCode {
get {
return zipCode;
}
set {
zipCode = value;
}
}
</code>
Då får du bättre kontroll på tilldelning och avläsning av variabeln.
Mvh Sv: Konstruktor i C#
Tyvärr är jag lite för korkad/grön för att fatta vad du menade. Lite cool att en filmstjärna (MSDN-TV) som du svarade... ;-)
Mvh,
FredricSv: Konstruktor i C#
<code>
ZipCode0 theZipCode = new ZipCode0(...);
string theZip = theZipCode.zipCode; // <- Här kommer det bli fel, zipCode är privat
theZipCode.zipCode = "164 93"; // Här kommer det också bli fel, samma skäl som ovan
</code>
Men däremot skulle det här vara helt dugligt:
<code>
ZipCode0 theZipCode = new ZipCode0(...);
string theZip = theZipCode.ZipCode; // <- Observera stor bokstav på ZipCode
theZipCode.ZipCode = "164 93"; // <- Observera stor bokstav på ZipCode
</code>
Det som också är grannt är att om du inte vill att någon ska kunna tilldela ZipCode något värde så tar du bara bort "set" metoden, och användare av din klass ZipCode0 kommer bara kunna läsa ZipCode och alltså då bara sätta ZipCode genom konstruktorn!
<code>
public string ZipCode {
get {
return zipCode;
}
}
</code>
Fler filmer kommer... ;)
MvhSv: Konstruktor i C#
Tack för att du tog tid tid att vidareutveckla din lösning. Ska verkligen sätta mig ner och testa detta (jag kanske tom. kommer fatta denna gång...?)
Men nu ska jag äta först... ;-)
Tusen tack!Sv: Konstruktor i C#
<code>
namespace WebApplication1.Classes
{
public class ZipCode0
{
private string zipCode;
public ZipCode0(string zipCode, Country country) {//Konstruktor - ta emot postnummer och Contry-värde
zipCode = zipCode.Replace(" ",string.Empty);
switch(country) {
case Country.Sweden:
zipCode = zipCode.Insert(3," ");//lägg in mellanslag på pos 3
zipCode = "SE-" + zipCode;//lägg till landskod
break;
case Country.Norway:
zipCode = "NO-" + zipCode;
break;
}
this.zipCode = zipCode;//värde som returneras till objektet. Är det så man gör????
}
public override string ToString()
{
return zipCode;
}
}
}
</code>
Nu funkar ZipCode klassen som alla andra klasser i .NET frameworkSv: Konstruktor i C#
Jag går en utbildning nu och vi har precis börjat med C# och det är väldigt frustrerande när man inte kan lösa allt själv på en gång.
Vi hade fått i uppgift lyfta ut metoden (som vi använt i tidigare övning) och lägga den i en egen klass (som övning). Metoden skulle vi lägga i konstruktorn och sen skulle vi lösa resten själva som hemuppgift. Lätt som en plätt tänkte jag... Men det var inte så lätt.
Men jag tycker att det var en smart lösning du kom på här och med facit i handen så ser det självklart ut. Detso mer frustrerande när man inte kom på det själv. Grrrr....
;-)
Tack ska ni ha!
(jag lär återkomma med fler puckade frågor)