17. september 2012 - 15:46Der er
17 kommentarer og 2 løsninger
List<UserControl> og tilgang til properties
Hej,
Jeg har en liste (List) af UserControls: private List<UserControl>
Denne liste indeholder UserControls af forskellige typer, f.eks. Printer, Kuglepen, Kontorstol osv.
Alle disse typer har flere properties, som er ens. F.eks. har de alle en property, som hedder Farve. Nu kan man så selvfølgelig tilgå disse properties som her: Printer1.Farve = Colors.Black; Kuglepen1.Farve = Colors.Black; Kontorstol1.Farve = Colors.Black;
Men hvis jeg nu ønsker at sætte disse properties i et loop, er jeg nød til at spørge på typen og caste, for at sætte property'en.
for (int i = 0; i < minListe.Count; i++) { if (minliste[i] is Printer) (minListe[i] as Printer).Farve = Colors.Black;
if (minliste[i] is Kuglepen) (minListe[i] as Kuglepen).Farve = Colors.Black;
... ...
Kan dette ikke gøres med een linie, som noget a la:
for (int i = 0; i < minListe.Count; i++) { (minListe[i]).Farve = Colors.Black; }
>>runesoft for(dynamic minUserControl in minListe){ minUserControl.Farve = Colors.Black; }
så skal jeg vel have et loop til hver type??
>>arne_v Jeg har aldrig arbejdet med abstrakte klasser, derfor følgende spørgsmål: Hvor skal denne klasse defineres? Hvordan bruger jeg properties fra den abstrakte klasse i min UserControl klasse?
Nej. Dynamic gør at det vil virke. Hvis du gerne vil lære lidt af det synes jeg nu du skal gå efter interfacet eller den abstrakte klasse. Det er også på mange måder pænere :)
Det kører! Jeg brugte løsningen med den abstrakte klasse, men har så også lært noget om Interface :)
Hvor vil det være mest normalt/korrekt at lægge den abstrakte klasse? Jeg er klar over, at det ikke spiller nogen rolle, men hvor ville I have defineret den?
Det er da så vidt jeg kan gennemskue kun en ekstra fil der dækker alle dine nuværende og fremtidige user controls. Du kan i princippet også lave det i samme fil som en af dine user controls, men det bliver hurtigt svært at gennemskue hvad kode der ligger hvor hvis ikke filnavnet nogenlunde røber hvad filen indeholder.
Et interface et bedre end en abstrakt basis klasse, hvis: - "is a" kriteriet ikke er fuldt opfyldt - sub klasserne kan have forskellig implementering
Men jeg vurderede at det ikke var tilfaeldet her.
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.