PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?
Verwijderd
De vraag is niet hoe je een lijst classes opvraagt, de vraag is waarvoor je dit nodig denkt te hebben en hoe je dat beter kunt oplossen.
Dan heb ik subclasses hiervoor, bijvoorbeeld StoreTop1Toys. Die zien er zo uit:
1
2
3
4
5
6
7
8
9
10
11
12
| public class StoreTop1Toys : Store { public StoreTop1Toys() : base("Top1Toys", "http://fjsljdfksdf/") { } public override string RegExp { get { return "sjfldjksf"; } } } |
Nu wil ik dus een iets nettere oplossing dan ergens een List maken waar ik steeds een .Add() aan moet toevoegen als ik een nieuwe class maak voor een winkel.
Ik kwam al op:
1
2
3
4
5
6
7
8
| Type[] types = typeof(Store).Assembly.GetTypes(); foreach (Type t in types) { if (t.BaseType.Equals(typeof(Store))) { System.Reflection.ConstructorInfo i = t.GetConstructor(new Type[] { }); } } |
Maar het enige wat ik kon vinden was de ConstructorInfo, maar ik kan geen instance terug krijgen van i.
[ Voor 28% gewijzigd door Tanuki op 21-03-2010 00:32 ]
PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?
Je moet pas subclasses gaan maken als deze van gedrag verschilt van de base class.
Er bestaan tal van voorbeeldjes waar duck inherit van bird enkel om bij "Getsound() { return "kwak"; }" te zetten.
Fout.
Je maakt een subclass voor pinguin omdat "Fly() { throw new CanNotFlyException(); }" het gedrag verandert.
ASSUME makes an ASS out of U and ME
Die regex is heel specifiek voor de website van 1 winkel. Die ga ik toch niet meegeven aan de constructor?H!GHGuY schreef op zondag 21 maart 2010 @ 08:32:
Wat denk je van die RegExp ook aan de base constructor mee te geven? Dan heb je de overbodige classes geëlimineerd.
Je moet pas subclasses gaan maken als deze van gedrag verschilt van de base class.
Er bestaan tal van voorbeeldjes waar duck inherit van bird enkel om bij "Getsound() { return "kwak"; }" te zetten.
Fout.
Je maakt een subclass voor pinguin omdat "Fly() { throw new CanNotFlyException(); }" het gedrag verandert.
1
2
3
4
5
6
7
8
9
10
| class Program { private List<Store> stores; static void Main(string[] args) { stores = new List<Store>(); stores.Add(new Store("Top1Toys", "http://sklfjfs/", "~heleLangeRegularExpressionDieEigenlijkNiksMetDeDefinitieVanDeWinkelVanDoenHeeft~")); } } |
Voordeel van dit is wel dat ik een list heb met winkels, die ik nodig heb..
PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?
Het "kwak"-geluid uit het voorbeeld van H!GHGuY is ook heel specifiek voor het type vogel.l0c4lh0st schreef op zondag 21 maart 2010 @ 09:40:
[...]
Die regex is heel specifiek voor de website van 1 winkel. Die ga ik toch niet meegeven aan de constructor?
Waar het om gaat is dat de verschillende winkels geen ander gedrag vertonen. Álle winkels hebben een reguliere expressie, en die wordt teruggegeven door de functie.
De winkels zijn in ontwerp hetzelfde, alleen in de gegevens niet. Door elke winkel een eigen subklasse te geven, maak je het jezelf onnodig veel te moeilijk. Stel dat je straks 400 winkels in je applicatie hebt zitten, dan heb je zoveel klassen dat je applicatie niet meer te onderhouden is.
[ Voor 17% gewijzigd door DEiE op 21-03-2010 11:02 ]
t.IsSubclassOf(typeof(Store))) dan werkt de inheritance ook wat dieper, en dan
(Store)Activator.CreateInstance(t).
Het grote voordeel van windows is dat je meer dos-boxen kan openen
Dit is juist precies wat je wel wiltl0c4lh0st schreef op zondag 21 maart 2010 @ 09:40:
[...]
Die regex is heel specifiek voor de website van 1 winkel. Die ga ik toch niet meegeven aan de constructor?
C#:
1 2 3 4 5 6 7 8 9 10 class Program { private List<Store> stores; static void Main(string[] args) { stores = new List<Store>(); stores.Add(new Store("Top1Toys", "http://sklfjfs/", "~heleLangeRegularExpressionDieEigenlijkNiksMetDeDefinitieVanDeWinkelVanDoenHeeft~")); } }
Voordeel van dit is wel dat ik een list heb met winkels, die ik nodig heb..
Kater? Eerst water, de rest komt later
Dat werkt, dank u.doskabouter schreef op zondag 21 maart 2010 @ 12:04:
Volgens mij moet je gewoon deze hebben:
t.IsSubclassOf(typeof(Store))) dan werkt de inheritance ook wat dieper, en dan
(Store)Activator.CreateInstance(t).
PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?