Hej, Du är inte ensam Per, OO är det som är svårast för de flesta när de börjar med .NET Glöm det där med dataset , de är extremt tunga för att göra enkla saker som en lista med kunder. <b>Glöm det där med dataset , de är extremt tunga för att göra enkla saker som en lista med kunder.</b>Nybörjarfråga
Jag är nybörjare på C# och kämpar för att föstå detta med OO-programmering. Jag har inga problem med att skapa egna klasser eller jobba med egenskaper och get/set. Det finns gott om exempel på "såhär skapar du en person/kund-klass" osv.
Det jag däremot har problem med att förstå är när jag ska skapa och använda dessa klasser.
Om jag t.ex har en databas med kunder och vill få ut dessa i en combobox eller listbox, så skapar jag bara ett dataset och talar om att comboboxen ska ha datasetet som datakälla. Ska jag istället först skapa en kund-klass med egenskaper som motsvarar fälten i databasen och sedan skapa en ny kund
för varje rad i databasen först?
Vart kommer det här med klasser in i bilden?
Tack på förhand från en förvirrad nybörjare!Sv: Nybörjarfråga
Om vi tar ditt exempel med kunder så är det helt ok att göra som du beskriver om man bara skall visa data och där tar det slut. Men vill du bearbeta o jobba med kunderna blir det genast smidigare om du har skapat kundobjekt.
Låt säga att du vill kunna plocka fram alla som är över 18. Då har du först gjort en function på kundklassen som returnerar ålder på kunden. Själva data i databasen innehåller bara personnummer, när du skapar dina kundobjekt lagrar du datat om personnummer i varje kundobjekt inge mer.
Du har nu dina kundobjekt i en Lista eller liknande och kan loopa igenom den och där Age > 18 kopiera dem och lägga dem i en annan Lista eller bara rapportera antalet om du hellre vill det.
Ett lite enklare exempel kanske kan vara ett kortspel. Poker (Vanlig fem-korts poker) , där har vi en kortlek (52 kort), när en spelare fått sina kort har han en "hand".
Här kan vi nu skapa klasserna Kort, Kortlek och Hand.
Kort har egenskaper som färg och värde (tex spader 7)
Kortlek består av en Lista med Kort, har en funktion som heter Shuffle, en som heter GetCard som returnerar ett Kort.
Hand består av fem Kort, har en funktion som kan jämföra sig själv med en annan Hand och anger vilken som är högst.
När man sen skall "spela" Skapar man en Kortleksklass. Man skapar så många Händer som det är spelare, vid varje Handskapande så hämtars fem kort från Kortleksobjektet o läggs in i varje Handobjekt. Sen kan man jämföra de olika händerna med hjälp av Jämförelse funktionen.
Varje klass är ett koncept av verkligheten, i ditt exempel så var det Kunder vidare kan man tänkas att du har Varor, Ordrar osv...
I ditt exempel kanske du tror att du inte använt nån klass men där har du fel... både comboboxen och datasetet är klasser. ComboBox är ett koncept att man skall kunna ta fram en lista på alternativ och välja ett. Man skall kunna lägga till alternativ i lista (.add(..)) m.m.
Varje gång du gör en comboBox skapar du en instans av klassen comboBox. Det som kan vara lite förvirrande är att du gör detta grafiskt när du gör drag & drop ifrån toolboxen. Men titta i Form1.Designer.cs (filen som genereras av ditt grafiska skapande) så skall du se att där finns 'new System.Windows.Forms.ComboBox'.
Förstår att det kan kännas trixit men jag lovar dig att när du kommer in i det så kommer bitarna bara att falla på plats och allt bli så mycket lättre att koda.Sv: Nybörjarfråga
Du är helt inne på rätt spår när du tänker att skapa upp ett kundobjekt när du hämtar en kund
och hämtar du flera kan du använda tex. en List<kund> och lägga dem i.
Och gör du detta "manuelt" så använd datareader istället för dataset.
men för att slippa sitta och skapa alla dessa entiter(klasser) själv så finns det or-mappers
Där du mappar dina databastabeller mot enkla objekt som du sedan använder i C#.
tex.
entity framework
http://msdn.microsoft.com/en-us/library/aa697427(VS.80).aspx
linq to sql.
http://msdn.microsoft.com/en-us/library/bb425822.aspx
finns även en uppsjö 3e parts produkter som tex. teleriks orm http://www.telerik.com/products/orm.aspx
Teleriks mapper är väldigt enkel att använda och finns i gratis version så länge du kör mot en gratis datakälla så som mysql eller sql server express.Sv:Nybörjarfråga
En mild protest :-) Det finns applikationer där DataSet inte är något problem eftersom prestandan inte är något problem vilket i sin tur brukar betyda små datamängder. Men skall man tänka stort håller jag med dig...