Dynamic polymorphism - explanation
macky
martin.butina at ice.si
Mon Apr 16 23:27:01 PDT 2007
I found a solution, though I'm not sure why things behave like this...
It works if a derived class has its own implementation of GetType(int index) or GetValue(int index) and base class has only abstract methods of the two. I would expect if I implement methods in a base class all children would also implement this method. But it seems that the child class needs to override it to do the job... yep, tupleof works in a misterious ways ;)
macky Wrote:
> 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