Dynamic polymorphism - explanation

macky martin.butina at gmail.com
Sun Apr 15 23:47:27 PDT 2007


You're right! Serialization is just one of the benefit comming from this. But I'm planing to do something even more interesting. I'm trying to port my DAL (data access layer) into d and share it with d community. I was planning to bind it to ddbi. From my experiances this is the most convinient way of handling data in a bussiness application (transaction pattern). Unfortunately I'm having a hard time accessing fields dynamicaly. I also miss some meta parameters (c# is really handy), but this is not as much of an issue. Anyway if I embeded tupleof in a class itself (similar to your suggestion) it does not return it's own fields. *doh*. I'm a bit of stuck here. In order to do what I have planned I to access fields somehow.

cheers, martin


Jarrett Billingsley Wrote:

> "macky" <martin.butina at gmail.com> wrote in message 
> news:evnbo3$30r2$1 at digitalmars.com...
> >
> > ah. sorry. Classes are empty due to my lazyness ;). Actualy there are some 
> > virtual methods defined in a base class but some members are are defined 
> > just in a derived class. My idea was that I would get this members with 
> > tuppleof function (I guess I'm trying to fake the reflection). These 
> > members do not exist in a base class ofcourse but my question is if this 
> > is possible the way I wanted to perform this task... Since my 
> > DoSomething() function is expecting the base class and in implementation I 
> > have provided the derived class I would expect that it is handled as a 
> > derived class. But I realize that this derived class is cast in a base 
> > class and therefor no member is returned. I would like to avoid this but I 
> > don't know how. I thought that I'm not using input parameters correctly?
> >
> > regards, Martin
> 
> Ah, I see now.  Depending on what you're trying to do, tupleof might be 
> unnecessary.  You could design it the other way around, like so:
> 
> class BaseClass()
> {
>     ...implementation of interface...
> 
>     // To be overridden
>     void processMe(Process p);
> }
> 
> class Customer() : BaseClass
> {
>    ...some members and overriden baseclass functions...
>     void processMe(Process p)
>     {
>         // do the processing
>     }
> }
> 
> class Process()
> {
>     void DoSomething(BaseClass object)
>     {
>         // this will call the appropriate process method based
>         // on the derived class type
>         object.process(this);
>     }
> }
> 
> But that you want to access data fields of classes and not just the methods 
> makes me think you want to do something more complex, like .. serializing 
> the members of a class to a file?  I'm wondering why you want to access to 
> the data fields of the class. 
> 
> 



More information about the Digitalmars-d-learn mailing list