List<User> userList = new List<User>(); while (reader.Read()) { User user = new User( (int)reader["UserID"], (string)reader["UserName"], (string)reader["FirstName"], (string)reader["LastName"] );
Jeg bruger gerne eks 1, men jeg har også typisk mange properties, og nogle, der skal "regnes på" mellem DB og objekt.
Men man skal have parametre med i constructoren i eet tilfælde, nemlig hvor der kun er en get-metode til en property. Det kan fx være et id, man ikke må kunne ændre i objektet.
Ja, det ville være sådan jeg ville gøre. Der er så ingen Set-metode til UserID-property.
Det er vel mest normalt netop med een, men er der flere af samme slags, der ikke må ændres undervejs, så skal der flere parametre på constructoren.
Man kan sige at men nemt kommer til at "glemme" en tilordning til en property på eks-1-måden, som man ikke ville på eks-2-måden, hvor det vil være en syntaksfejl at glemme en parameter.
1. Fordi man får et compile-time check på om man husker at sætte alle properties. 2. Fordi man ikke kører redundant kode i den tomme konstructor. 3. Fordi det håndterer eventuelle read-only parametre.
"1." Til gengæld skal man huske rækkefølgen i kaldet af constructoren ;) Man får ingen fejl her, hvis man bytter om på UserName og FirstName. Compiletime tjek er selvfølgelig ok, alt andet lige, men det får jo ikke programmet til at være korrekt - der skal man have en passende automatisk test, unittest af en slags, og så vil fejl i både metode 1 og 2 opdages.
Jeg laver rent rutinemæssigt altid: - en constructor som sætter alle værdier fra ragument listen - en constructor uden argumenter som kalder den første constructor med nogle default værdier - settere
Så kan brugeren af klassen selv vælge om de vil det ene eller det andet.
Hvis jeg selv skal oprette en instans vil jeg vælge metode #2 hvis antal argumenter er tilpas lille til at man kan overskue argument listen. Det er så de fleste tilfælde. Ellers vil jeg falde tilbage på metode #1.
Synes godt om
Ny brugerNybegynder
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.