søndag, august 12, 2007

Klasser, hvordan man laver og bruger dem

I en af de forrige blogs fortalte jeg lidt om hvorfor man bruger klasser, hvad det gode er ved dem, og en smule om hvordan man laver dem. I denne blog vil jeg gå lidt mere i dybden med det og prøve at oprette en bruger-klasse med nogle brugeregenskaber såsom brugernavn, rigtig navn, alder, by og brugerbillede. og alt det vil jeg så lave en metode der kan formatere til html, så vi kan se det i en pæn udgave på skærmen bagefter.

Som i sikkert kan huske fra tidligere, så har vi selve klassefilen som skal ligge i App_Code folderen. Start med at oprette sådan en klasse(class) og kald den Webuser.cs.
Læg mærke til at Visual Studio/Visual Webdeveloper selv laver en skuffe der hedder App_Code og ligger Webuser.cs i den hvis i svarer ja til det.

Den bedste måde at se på .cs filen, er som en arbejdstegning. webuser.cs kommer ikke til at indeholde oplysninger om selve brugerne, men oplysninger om, hvad vi skal vide om brugeren. Det vil sige at vores webuser.cs i dette tilfælde kommer til at indeholde nogle egenskaber der hedder "username", "Age" og en metode der hedder "HtmlOutput()" Hvis der bliver mulighed for det, vil jeg se om jeg ikke kan smide en event eller 2 i min Users.cs også, men da jeg ikke selv føler jeg har styr på dem endnu, så tør jeg ikke love noget.

Lad os komme tilbage til Webuser.CS som i nu har oprettet. Der burde nu stå følgende:





public class Webuser
{
public Webuser()
{
//
// TODO: Add constructor logic here
//
}
}



Dette i sig selv gør ikke det store så lad os prøve at smide lidt oplysninger i den. Lad os smide brugernavn, alder og by i den. Det gør vi ved at lave 3 strings på følgende måde:





public class Webser
{
private string Username;
private string Age;
private string City; private string Userpicture;
}



Læg mærke til jeg har smidt "private" foran mine strings.. Dette betyder at jeg kun kan tilgå mine strings fra selve klassen. hvordan vi så bruger dem kommer jeg til for det giver mig senere mulighed for at lave noget kode i klassen der sikrer at det er gyldige data der står i variablerne, så der ikke ved et uheld kommer til at være en tom variabel.. så får vi bare fejl når vi kompilerer koden, eller endnu være. Brugeren af dit website får en fejl smidt i hovedet når han prøver at oprette sin egen bruger.

Nu har jeg mulighed for i min code-behind at lave en ny bruger ved at skrive:



Webuser NyBruger = new Webuser();



Det vi lige har gjort er at tage vores Arbejdstegning der hedder Webuser.cs, og ud fra den har vi nu lavet en ny bruger der hedder NyBruger. Det er en start, men vi vil også gerne kunne fortælle hvordan vores NyBruger kan få et brugernavn, alder og en by. Hvis vi havde lavet vores egenskaber public istedet for private, ville vi kunne give vores bruger brugernavn ved at skrive NyBruger.Username = "Johnny"; Men nu har vi gjort den private, så derfor kan vi ikke bare få fat i den sådan. For at kunne bruge den skal vi tilbage til vores Webuser.cs og skrive lidt mere på vores kode. Det vi skal have gjort er at lave noget der hedder "Accessors" eller "adgangsbrugerflade" hvis man kan kalde det det. Det gør vi sådan:





public class Webuser
{
private string Username;
private string Age;
private string City;
private string Userpicture;
public string username
{
get { return Username; }
set { Username = value; }
}
public string age
{
get { return Age; }
set { Age = value; }
}
public string city
{
get { return City; }
set { City = value; }
}
public string userpicture
{
get { return Userpicture; }
set { Userpicture = value; }
}
}


Det vi har gjort nu er at lave nogle adgangsmuligheder så man kan tilgå Username osv. fra vores code-behind. Læg mærke til at vores Public string er lavet med KUN små bokstaver. Dette er fordi at vi ikke må bruge samme navn som vores private string. normalt er det ikke god praksis at kalde sine variabler det samme, men i dette tilfælde er det faktisk helt lovligt og meget almindeligt. Der er også nogle, der istedet for at bruge små bokstaver bruger _Username istedet. Det er helt op til en selv hvad der er nemmest at bruge. begge ting bliver brugt til dagligt.

Hvis i kigger i jeres code-behind så har i nu adgang til at kalde de forskellige ting i jeres klasse med Webuser.Username, Webuser.City osv. men hvis nu vi skal smide en metode i til at lave noget fancy html på skærmen, så kræver det lidt mere.

Da denne blogting er så elendig så jeg ikke kan skrive htmlkode i den uden den formaterer den, så har jeg erstattet alle <>tags med [] tags. De skal selvfølgelig rettes til når man skriver den ind.

For at det ikke skal blive for uoverskueligt har jeg skåret lidt ned på starten af klassekoden, da jeg allerede har gennemgået den ovenover:



public string userpicture
{
get { return Userpicture; }
set { Userpicture = value; }
}
public string HTMLOutput()
{
string HtmlString;
HtmlString = "[h1]" + Username + "[/h1]";
HtmlString += "[h4][b]Age: [/b]" + Age + "[/h4]";
HtmlString += "[h4][b]City: " + City + "[/h4]";
HtmlString += "[img src=" + Userpicture + "]";
return HtmlString;
}
}

Det jeg har gjort her er bare at smide en simpel metode ind i min klasse som kan lave noget fancy html til skærmen, så det jeg evt kunne gøre nu er at kalde metoden fra min code-behind med "response.write(Webuser.HTMLOutput().tostring())" Så simpelt er det.



Det er så det jeg mente jeg lige ville gennemgå idag. Men jeg vil tilføje lidt mere herinde efterhånden som jeg lærer nye ting. Husk, at det her er bare sådan jeg har forstået hvordan tingene fungerer, og der kan være nogle ting som jeg måske har forstået forkert. Hvis i opdager nogle fejl, så smid en kommentar. Så kan jeg også selv blive klogere.





God kodning



Ingen kommentarer: