Voor een projectje (nou ja, stageopdracht) ben ik druk bezig met het proberen te schrijven van een applicatie in VB.NET. Alles werkt (bijna) precies zoals ik het bedoeld heb, dus daar is niks mis mee.
Omdat ik niet zo netjes programmeer (tja, Electro, en geen IT'er
) wil ik niet het risico lopen dat m'n programma niet meer reageert omdat er iets mis gaat bij het bevragen van de database ofzo. Dus ik werk met verschillende threads. Ook dat werkt naar behoren, en m'n programma blijft ondertussen ook fijn doorwerken. Allemaal leuk en aardig.
Maar nu heb ik in de klasse die als thread wordt uitgevoerd ook een ResultObject zitten. Hierin komen (in dit geval) de resultaten van de uit te voeren query. Omdat dit van alles kan zijn, van een TextBox tot een StringCollection heb ik dit op moeten lossen door middel van Late Binding.
Hierbij zijn dus de methoden en eigenschappen van het object pas bekend bij uitvoering van de code. Omdat hier nog wel wat lastigheidjes aan zitten, zoals het risico dat je een niet bestaande methode aanroept, is het misschien niet zo'n nette manier. Van de andere kant, zolang ik de enige ben die aan het programma werk weet ik (meestal nog wel tenminste
) welke objecten ik in de klasse kan stoppen.
Mijn vraag is nu dus eigenlijk een beetje: Zijn er mooiere (en eenvoudiger) oplossingen voor dit probleem?
Zoals bijvoorbeeld het schrijven van een (overloaded) methode voor alle mogelijke objecten. Alleen is dit erg veel werk. Maar vanuit een veiligheids of stabiliteits oogpunt is dit misschien wel een betere oplossing.
Je zou natuurlijk ook kunnen zeggen dat je maar een type object aan de klasse kunt verbinden, maar hierdoor wordt je oplossing een stuk minder flexibel.
Laat hier je ideeen maar los, en ik hoop dat er vruchtbaar gediscussierd kan worden...
Voorbeeldje Late Binding:
Omdat ik niet zo netjes programmeer (tja, Electro, en geen IT'er
Maar nu heb ik in de klasse die als thread wordt uitgevoerd ook een ResultObject zitten. Hierin komen (in dit geval) de resultaten van de uit te voeren query. Omdat dit van alles kan zijn, van een TextBox tot een StringCollection heb ik dit op moeten lossen door middel van Late Binding.
Hierbij zijn dus de methoden en eigenschappen van het object pas bekend bij uitvoering van de code. Omdat hier nog wel wat lastigheidjes aan zitten, zoals het risico dat je een niet bestaande methode aanroept, is het misschien niet zo'n nette manier. Van de andere kant, zolang ik de enige ben die aan het programma werk weet ik (meestal nog wel tenminste
Mijn vraag is nu dus eigenlijk een beetje: Zijn er mooiere (en eenvoudiger) oplossingen voor dit probleem?
Zoals bijvoorbeeld het schrijven van een (overloaded) methode voor alle mogelijke objecten. Alleen is dit erg veel werk. Maar vanuit een veiligheids of stabiliteits oogpunt is dit misschien wel een betere oplossing.
Je zou natuurlijk ook kunnen zeggen dat je maar een type object aan de klasse kunt verbinden, maar hierdoor wordt je oplossing een stuk minder flexibel.
Laat hier je ideeen maar los, en ik hoop dat er vruchtbaar gediscussierd kan worden...
Voorbeeldje Late Binding:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| Dim a As String Dim s As String s.Text = "nieuw" a.Text = "oud" TextWissel(a, s.Text) 'Als het goed gaat is a.Text nu "nieuw" en s.Text "oud" Sub TextWissel(byref InObject As Object, ByRef InString As String) Dim t As String t = Object.Text 'Mogelijk error, als object geen Text property heeft, anders gaat het wel goed Object.Text = InString 'Ook dit gaat alleen goed als je het juiste object gebruikt InString = t t = Nothing End Sub |