Re: How to pass class as parameter?




Brett wrote:
> "Larry Lard" <larrylard@xxxxxxxxxxx> wrote in message
> news:1113407173.231972.289250@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
> >
> > Brett wrote:
> >> I have several classes that create arrays of data and have certain
> >> properties. Call them A thru D classes, which means there are
four.
> > I can
> >> call certain methods in each class and get back an array of data.
> > All four
> >> classes are the same except for the number of elements in their
> > arrays and
> >> the data.
> >>
> >> I have a MainClass (the form), which processes all of these
arrays.
> > The
> >> MainClass makes use of third party objects to do this. There are
> > three
> >> methods in the MainClass. Currently, I pass a parameter to these
> > three
> >> methods such as "A as string". This means to process class A. I
> > have case
> >> statements that take this parameter in the MainClass methods to
know
> > know
> >> which class needs processing. There is much redundant code here
> > since the
> >> same processing is done for each class. It would be nice if I
could
> > just
> >> pass in the class name as a parameter and run the code. Problem
is I
> > have
> >> four classes instead of one and can't just pass them in as type
> > class.
> >>
> >> Should I place these four classes in a module? How else can I get
> > around
> >> using the case statements in the MainClass?
> >
> > If you mean that A B C D all implement the 'same' methods, define
an
> > interface IMyMethods containing these methods, and have A B C D all
> > Implement IMyMethods. Then where you currently pass "A" As String,
> > instead pass MyABCD As IMyMethods, and polymorphically invoke the
> > methods.
>
> I think this approach will work nicely. The method interfaces for
the four
> classes are the same. Any functions returning something are all the
same
> type. The only differences are inside of the methods, which is
completely
> encapsulated. Given this, can I still use the above technique?

Sure thing. However... as a general principle, you should only do this
if the *meaning* of the method called and data returned are the same
across all the classes that will be implementing the interface.
Example: if we have CSupplier, CCustomer, CEmployee that all implement
IHaveAnAddress, and one of the interface methods is GetAddress
returning an array of String, then it would be misleading if, say,
CSupplier.GetAddress actually returned the last five order headers for
that supplier, even though the type would be correct.

If the semantics of the calls are different, I would say you're better
off checking the type with TypeOf ... Is and calling the different
methods with different names.

--
Larry Lard
Replies to group please

.



Relevant Pages

  • Re: How to pass class as parameter?
    ... >> I have several classes that create arrays of data and have certain ... >> I have a MainClass, which processes all of these arrays. ... > interface IMyMethods containing these methods, and have A B C D all ... > Dim MyB As B = DirectCast ...
    (microsoft.public.dotnet.languages.vb)
  • Re: How to pass class as parameter?
    ... > I have several classes that create arrays of data and have certain ... > I have a MainClass, which processes all of these arrays. ... Implement IMyMethods. ... Dim MyB As B = DirectCast ...
    (microsoft.public.dotnet.languages.vb)
  • How to pass class as parameter?
    ... I have several classes that create arrays of data and have certain ... I have a MainClass, which processes all of these arrays. ... which class needs processing. ... There is much redundant code here since the ...
    (microsoft.public.dotnet.languages.vb)
  • Re: couple c and fortran 95
    ... I would always put middleware layer at either side of the interface not just ... Fortran by Reference. ... arrays or by passing a pointer from the C side of the interface. ... C strings are null terminated arrays of character; ...
    (comp.lang.fortran)
  • Re: INTERFACE problem
    ... Having an explicit interface makes *NO* difference at all. ... What matters is what the dummy arrays are like. ... If the dummy arrays look like f77 ones, then you will get f77-style passing no matter whether you have an explicit interface or not. ... meant to include passing an array element to an array dummy, and passing arrays with different rank than the dummy, both of which are somewhat unusual. ...
    (comp.lang.fortran)