Re: Interfaces, Big Deal!!
Franco,[color=blue]
> Ok, I see, on this case Interface and Implementation are coming on couple
> and I have just one implementation for my code.
> But still I don't see how ShapeImpl will access to my protected methods[/color]
and[color=blue]
> private variables from Circle because is a object into the Circle object.
>[/color]
Are the protected methods inherited or added to Circle. If you added them to
Circle should they have been added to ShapeImpl instead?
Are they private variables added to Circle itself, should they have been
added to ShapeImpl instead?
For methods you will need to structure the method such that the
Implementation class (ShapeImpl) will be able to see it. Either via an
interface of Friend.
Alternatively ShapeImpl can have call backs (either delegate fields or full
events) that it uses to call into Circle when it needs information from
Circle.
For variables I would either make them a member of the Implementation class
itself or pass them as parameters when I call into the Implementation class.
Normally I would set it up such that each instance of Circle had its own
ShapeImpl, which means that ShapeImpl can hold per instance variables of
Circle, in which case ShapeImpl would not need to access details of Circle.
Hope this helps
Jay
"Franco Gustavo" <gfranco@inunti us.com> wrote in message
news:e3bJtoniDH A.3660@tk2msftn gp13.phx.gbl...[color=blue][color=green]
> > As Sherif stated, .NET does not have Multiple Implementation[/color][/color]
Inheritance,[color=blue][color=green]
> > one common method to get around this is to have an Implementation class
> > along with your interface. You would have an IShape interface along with[/color][/color]
a[color=blue][color=green]
> > ShapeImpl implementation class. Your Circle class would implement the[/color]
> IShape[color=green]
> > interface, then contain a ShapeImpl object as a field, the IShape method
> > would delegate to the ShapeImple class. NOTE, Circle would NOT inherit[/color]
> from[color=green]
> > ShapeImpl.[/color]
>
> Ok, I see, on this case Interface and Implementation are coming on couple
> and I have just one implementation for my code.
> But still I don't see how ShapeImpl will access to my protected methods[/color]
and[color=blue]
> private variables from Circle because is a object into the Circle object.
>[color=green]
> > Have you considered using creating an Extender Provider class instead?
> >
> > An Extender Provider is a class (can be either a Component or a Control)
> > that implements the System.Componen tModel.IExtende rProvider interface
> > allowing you to add new properties to controls. Along with these[/color]
> properties[color=green]
> > you can attach event handlers to the targeted controls enabling you at[/color][/color]
add[color=blue][color=green]
> > functionality.[/color]
>
> I didn't know about that and how it works, I'll read that and try a shot.
>
> Thanks very much,
> Gustavo.
>
>
> "Jay B. Harlow [MVP - Outlook]" <Jay_Harlow@ema il.msn.com> wrote in[/color]
message[color=blue]
> news:u20V6cniDH A.604@TK2MSFTNG P10.phx.gbl...[color=green]
> > Franco,
> > As Sherif stated, .NET does not have Multiple Implementation[/color][/color]
Inheritance,[color=blue][color=green]
> > one common method to get around this is to have an Implementation class
> > along with your interface. You would have an IShape interface along with[/color][/color]
a[color=blue][color=green]
> > ShapeImpl implementation class. Your Circle class would implement the[/color]
> IShape[color=green]
> > interface, then contain a ShapeImpl object as a field, the IShape method
> > would delegate to the ShapeImple class. NOTE, Circle would NOT inherit[/color]
> from[color=green]
> > ShapeImpl.
> >
> > Have you considered using creating an Extender Provider class instead?
> >
> > An Extender Provider is a class (can be either a Component or a Control)
> > that implements the System.Componen tModel.IExtende rProvider interface
> > allowing you to add new properties to controls. Along with these[/color]
> properties[color=green]
> > you can attach event handlers to the targeted controls enabling you at[/color][/color]
add[color=blue][color=green]
> > functionality.
> >
> >[/color]
>[/color]
http://msdn.microsoft.com/library/de...derobjects.asp[color=blue][color=green]
> >
> >[/color]
>[/color]
http://msdn.microsoft.com/library/de...erprovider.asp[color=blue][color=green]
> >
> >[/color]
>[/color]
http://msdn.microsoft.com/library/de...idersample.asp[color=blue][color=green]
> >
> > Hope this helps
> > Jay
> >
> >
> > "Franco Gustavo" <gfranco@inunti us.com> wrote in message
> > news:uSkgoXmiDH A.3660@tk2msftn gp13.phx.gbl...[color=darkred]
> > > But Control doesn't do anything that I want.
> > >
> > > Basically, I want derive from Label, Panel, GroupBox, CheckBox,[/color]
> > RadioButton,[color=darkred]
> > > etc. and add my extended funcionalities
> > >
> > > The Class control doesn't have any funcionality.
> > >
> > > On that case if I derived from Control I have to rewrite each windows
> > > control from scratch wich is "not possible", doesn't make sense.
> > >
> > > Thanks,
> > > Gustavo.
> > >
> > > "Sherif ElMetainy" <elmeteny.NOSPA M@wayout.net.NO SPAM> wrote in[/color][/color][/color]
message[color=blue][color=green][color=darkred]
> > > news:%23yrvKOmi DHA.1048@TK2MSF TNGP11.phx.gbl. ..
> > > > Hello
> > > >
> > > > Unlike C++, C# doesn't support multiple implementaion inheritance.[/color][/color][/color]
But[color=blue][color=green][color=darkred]
> > > your
> > > > problem can be solved by deriving the class[/color][/color]
> ExtendedControl Funcionality[color=green][color=darkred]
> > > from
> > > > Control and deriving your class from ExtendedControl Funcionality.
> > > >
> > > > Best regards,
> > > >
> > > > Sherif
> > > >
> > > >
> > > > "Franco Gustavo" <gfranco@inunti us.com> wrote in message
> > > > news:#hz4qCmiDH A.1564@tk2msftn gp13.phx.gbl...
> > > > > Hi,
> > > > >
> > > > >
> > > > >
> > > > > Please help me to understand this, because I don't see what I'm[/color]
> > missing.[color=darkred]
> > > > >
> > > > >
> > > > >
> > > > > I was reading a lot of examples on Internet that explain that C#[/color]
> > doesn't[color=darkred]
> > > > > implement multiple inheritance it implement multiple interfaces.
> > > > >
> > > > >
> > > > >
> > > > > So, I keep reading and reading and reading to see how can I[/color][/color][/color]
resolve[color=blue]
> my[color=green][color=darkred]
> > > > > problem with interfaces.
> > > > >
> > > > > The conclusion is I'm writing to all of you because I couldn't[/color][/color][/color]
find[color=blue][color=green]
> > the[color=darkred]
> > > > way
> > > > > to resolve my problem.
> > > > >
> > > > >
> > > > >
> > > > > If I can create multiples interfaces and I have to implement the[/color]
> > methods[color=darkred]
> > > > on
> > > > > the derived class, then what's the big deal.
> > > > >
> > > > >
> > > > >
> > > > > I know if I declare a class that inherit from one interface is[/color][/color]
> useful[color=green][color=darkred]
> > > > > because for example
> > > > >
> > > > > I can create an Interface called Shape, and 3 Classes called[/color][/color][/color]
Circle,[color=blue][color=green][color=darkred]
> > > > > Rectangle, and Line.
> > > > >
> > > > > If on my interface I declare my method Draw(); and I implement on[/color][/color]
> each[color=green][color=darkred]
> > > > > derived class then I could do the next.
> > > > >
> > > > >
> > > > >
> > > > > IShape s = (IShape) AnyShapeObject;
> > > > >
> > > > > s.draw();
> > > > >
> > > > >
> > > > >
> > > > > I think is very useful and I used many times. But now the question[/color][/color]
> is[color=green][color=darkred]
> > > what
> > > > > is the similitude between Multiple Inheritance and Multiple
> > > Interfaces????
> > > > I
> > > > > don't see too much
> > > > >
> > > > >
> > > > >
> > > > > Why on Internet always speak for Multiple Inheritance and Multiple
> > > > > Interfaces like they have a relation???
> > > > >
> > > > >
> > > > >
> > > > > My Case:
> > > > >
> > > > >
> > > > >
> > > > > I have many Windows Control and I'm inherit each one for create my[/color][/color]
> own[color=green][color=darkred]
> > > > > Controls.
> > > > >
> > > > > For example I want to add method called getVirtualSize( );
> > > > >
> > > > >
> > > > >
> > > > > I create and interface
> > > > >
> > > > > IVirtualSize
> > > > >
> > > > >
> > > > >
> > > > > It contain
> > > > >
> > > > > public getVirtualSize( );
> > > > >
> > > > >
> > > > >
> > > > > So, on my derived class I MUST implement my method getVirtualSize[/color][/color]
> and[color=green][color=darkred]
> > > > that's
> > > > > it.
> > > > >
> > > > >
> > > > >
> > > > > Very nice!!!
> > > > >
> > > > >
> > > > >
> > > > > Now the real question is, I create a lot of logic on my paint[/color][/color]
> method;[color=green][color=darkred]
> > > this
> > > > > logic is exactly the same for all derived classes, why do I have[/color][/color][/color]
to[color=blue][color=green][color=darkred]
> > > > > implement this entire logic on each Control???
> > > > >
> > > > >
> > > > >
> > > > > With multiple inheritances you just create a class
> > > > > ExtendedControl Funcionality and Implement a method OnPaintEx, and[/color]
> > really[color=darkred]
> > > I
> > > > > have a nice source code, because my class[/color][/color]
> ExtendedControl Funcionality[color=green][color=darkred]
> > > has
> > > > > all the new extended functionality.
> > > > >
> > > > >
> > > > >
> > > > > Then how can I do the same with interfaces????
> > > > >
> > > > >
> > > > >
> > > > > I don't want to put my piece of code on every derived class, it is[/color][/color][/color]
a[color=blue][color=green][color=darkred]
> > > mess
> > > > > and very difficult to maintain, I want to centralize my source[/color][/color][/color]
code[color=blue][color=green]
> > and[color=darkred]
> > > in
> > > > > the same time I want to use many methods of the base classes, that[/color]
> > means[color=darkred]
> > > I
> > > > > want to use all the protected methods that the controls offer to[/color][/color][/color]
me[color=blue][color=green][color=darkred]
> > > > because
> > > > > OnPaintEx needs those.
> > > > >
> > > > >
> > > > >
> > > > > Really, here is only one example, the reality is that is a lot of[/color]
> > source[color=darkred]
> > > > > code that I "should" implement on every Control, I don't want to[/color][/color][/color]
do[color=blue][color=green][color=darkred]
> > > that.
> > > > >
> > > > >
> > > > >
> > > > > Thanks, the answers will be really appreciated.
> > > > >
> > > > > Gustavo.
> > > > >
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >[/color]
> >
> >[/color]
>
>[/color]
Franco,[color=blue]
> Ok, I see, on this case Interface and Implementation are coming on couple
> and I have just one implementation for my code.
> But still I don't see how ShapeImpl will access to my protected methods[/color]
and[color=blue]
> private variables from Circle because is a object into the Circle object.
>[/color]
Are the protected methods inherited or added to Circle. If you added them to
Circle should they have been added to ShapeImpl instead?
Are they private variables added to Circle itself, should they have been
added to ShapeImpl instead?
For methods you will need to structure the method such that the
Implementation class (ShapeImpl) will be able to see it. Either via an
interface of Friend.
Alternatively ShapeImpl can have call backs (either delegate fields or full
events) that it uses to call into Circle when it needs information from
Circle.
For variables I would either make them a member of the Implementation class
itself or pass them as parameters when I call into the Implementation class.
Normally I would set it up such that each instance of Circle had its own
ShapeImpl, which means that ShapeImpl can hold per instance variables of
Circle, in which case ShapeImpl would not need to access details of Circle.
Hope this helps
Jay
"Franco Gustavo" <gfranco@inunti us.com> wrote in message
news:e3bJtoniDH A.3660@tk2msftn gp13.phx.gbl...[color=blue][color=green]
> > As Sherif stated, .NET does not have Multiple Implementation[/color][/color]
Inheritance,[color=blue][color=green]
> > one common method to get around this is to have an Implementation class
> > along with your interface. You would have an IShape interface along with[/color][/color]
a[color=blue][color=green]
> > ShapeImpl implementation class. Your Circle class would implement the[/color]
> IShape[color=green]
> > interface, then contain a ShapeImpl object as a field, the IShape method
> > would delegate to the ShapeImple class. NOTE, Circle would NOT inherit[/color]
> from[color=green]
> > ShapeImpl.[/color]
>
> Ok, I see, on this case Interface and Implementation are coming on couple
> and I have just one implementation for my code.
> But still I don't see how ShapeImpl will access to my protected methods[/color]
and[color=blue]
> private variables from Circle because is a object into the Circle object.
>[color=green]
> > Have you considered using creating an Extender Provider class instead?
> >
> > An Extender Provider is a class (can be either a Component or a Control)
> > that implements the System.Componen tModel.IExtende rProvider interface
> > allowing you to add new properties to controls. Along with these[/color]
> properties[color=green]
> > you can attach event handlers to the targeted controls enabling you at[/color][/color]
add[color=blue][color=green]
> > functionality.[/color]
>
> I didn't know about that and how it works, I'll read that and try a shot.
>
> Thanks very much,
> Gustavo.
>
>
> "Jay B. Harlow [MVP - Outlook]" <Jay_Harlow@ema il.msn.com> wrote in[/color]
message[color=blue]
> news:u20V6cniDH A.604@TK2MSFTNG P10.phx.gbl...[color=green]
> > Franco,
> > As Sherif stated, .NET does not have Multiple Implementation[/color][/color]
Inheritance,[color=blue][color=green]
> > one common method to get around this is to have an Implementation class
> > along with your interface. You would have an IShape interface along with[/color][/color]
a[color=blue][color=green]
> > ShapeImpl implementation class. Your Circle class would implement the[/color]
> IShape[color=green]
> > interface, then contain a ShapeImpl object as a field, the IShape method
> > would delegate to the ShapeImple class. NOTE, Circle would NOT inherit[/color]
> from[color=green]
> > ShapeImpl.
> >
> > Have you considered using creating an Extender Provider class instead?
> >
> > An Extender Provider is a class (can be either a Component or a Control)
> > that implements the System.Componen tModel.IExtende rProvider interface
> > allowing you to add new properties to controls. Along with these[/color]
> properties[color=green]
> > you can attach event handlers to the targeted controls enabling you at[/color][/color]
add[color=blue][color=green]
> > functionality.
> >
> >[/color]
>[/color]
http://msdn.microsoft.com/library/de...derobjects.asp[color=blue][color=green]
> >
> >[/color]
>[/color]
http://msdn.microsoft.com/library/de...erprovider.asp[color=blue][color=green]
> >
> >[/color]
>[/color]
http://msdn.microsoft.com/library/de...idersample.asp[color=blue][color=green]
> >
> > Hope this helps
> > Jay
> >
> >
> > "Franco Gustavo" <gfranco@inunti us.com> wrote in message
> > news:uSkgoXmiDH A.3660@tk2msftn gp13.phx.gbl...[color=darkred]
> > > But Control doesn't do anything that I want.
> > >
> > > Basically, I want derive from Label, Panel, GroupBox, CheckBox,[/color]
> > RadioButton,[color=darkred]
> > > etc. and add my extended funcionalities
> > >
> > > The Class control doesn't have any funcionality.
> > >
> > > On that case if I derived from Control I have to rewrite each windows
> > > control from scratch wich is "not possible", doesn't make sense.
> > >
> > > Thanks,
> > > Gustavo.
> > >
> > > "Sherif ElMetainy" <elmeteny.NOSPA M@wayout.net.NO SPAM> wrote in[/color][/color][/color]
message[color=blue][color=green][color=darkred]
> > > news:%23yrvKOmi DHA.1048@TK2MSF TNGP11.phx.gbl. ..
> > > > Hello
> > > >
> > > > Unlike C++, C# doesn't support multiple implementaion inheritance.[/color][/color][/color]
But[color=blue][color=green][color=darkred]
> > > your
> > > > problem can be solved by deriving the class[/color][/color]
> ExtendedControl Funcionality[color=green][color=darkred]
> > > from
> > > > Control and deriving your class from ExtendedControl Funcionality.
> > > >
> > > > Best regards,
> > > >
> > > > Sherif
> > > >
> > > >
> > > > "Franco Gustavo" <gfranco@inunti us.com> wrote in message
> > > > news:#hz4qCmiDH A.1564@tk2msftn gp13.phx.gbl...
> > > > > Hi,
> > > > >
> > > > >
> > > > >
> > > > > Please help me to understand this, because I don't see what I'm[/color]
> > missing.[color=darkred]
> > > > >
> > > > >
> > > > >
> > > > > I was reading a lot of examples on Internet that explain that C#[/color]
> > doesn't[color=darkred]
> > > > > implement multiple inheritance it implement multiple interfaces.
> > > > >
> > > > >
> > > > >
> > > > > So, I keep reading and reading and reading to see how can I[/color][/color][/color]
resolve[color=blue]
> my[color=green][color=darkred]
> > > > > problem with interfaces.
> > > > >
> > > > > The conclusion is I'm writing to all of you because I couldn't[/color][/color][/color]
find[color=blue][color=green]
> > the[color=darkred]
> > > > way
> > > > > to resolve my problem.
> > > > >
> > > > >
> > > > >
> > > > > If I can create multiples interfaces and I have to implement the[/color]
> > methods[color=darkred]
> > > > on
> > > > > the derived class, then what's the big deal.
> > > > >
> > > > >
> > > > >
> > > > > I know if I declare a class that inherit from one interface is[/color][/color]
> useful[color=green][color=darkred]
> > > > > because for example
> > > > >
> > > > > I can create an Interface called Shape, and 3 Classes called[/color][/color][/color]
Circle,[color=blue][color=green][color=darkred]
> > > > > Rectangle, and Line.
> > > > >
> > > > > If on my interface I declare my method Draw(); and I implement on[/color][/color]
> each[color=green][color=darkred]
> > > > > derived class then I could do the next.
> > > > >
> > > > >
> > > > >
> > > > > IShape s = (IShape) AnyShapeObject;
> > > > >
> > > > > s.draw();
> > > > >
> > > > >
> > > > >
> > > > > I think is very useful and I used many times. But now the question[/color][/color]
> is[color=green][color=darkred]
> > > what
> > > > > is the similitude between Multiple Inheritance and Multiple
> > > Interfaces????
> > > > I
> > > > > don't see too much
> > > > >
> > > > >
> > > > >
> > > > > Why on Internet always speak for Multiple Inheritance and Multiple
> > > > > Interfaces like they have a relation???
> > > > >
> > > > >
> > > > >
> > > > > My Case:
> > > > >
> > > > >
> > > > >
> > > > > I have many Windows Control and I'm inherit each one for create my[/color][/color]
> own[color=green][color=darkred]
> > > > > Controls.
> > > > >
> > > > > For example I want to add method called getVirtualSize( );
> > > > >
> > > > >
> > > > >
> > > > > I create and interface
> > > > >
> > > > > IVirtualSize
> > > > >
> > > > >
> > > > >
> > > > > It contain
> > > > >
> > > > > public getVirtualSize( );
> > > > >
> > > > >
> > > > >
> > > > > So, on my derived class I MUST implement my method getVirtualSize[/color][/color]
> and[color=green][color=darkred]
> > > > that's
> > > > > it.
> > > > >
> > > > >
> > > > >
> > > > > Very nice!!!
> > > > >
> > > > >
> > > > >
> > > > > Now the real question is, I create a lot of logic on my paint[/color][/color]
> method;[color=green][color=darkred]
> > > this
> > > > > logic is exactly the same for all derived classes, why do I have[/color][/color][/color]
to[color=blue][color=green][color=darkred]
> > > > > implement this entire logic on each Control???
> > > > >
> > > > >
> > > > >
> > > > > With multiple inheritances you just create a class
> > > > > ExtendedControl Funcionality and Implement a method OnPaintEx, and[/color]
> > really[color=darkred]
> > > I
> > > > > have a nice source code, because my class[/color][/color]
> ExtendedControl Funcionality[color=green][color=darkred]
> > > has
> > > > > all the new extended functionality.
> > > > >
> > > > >
> > > > >
> > > > > Then how can I do the same with interfaces????
> > > > >
> > > > >
> > > > >
> > > > > I don't want to put my piece of code on every derived class, it is[/color][/color][/color]
a[color=blue][color=green][color=darkred]
> > > mess
> > > > > and very difficult to maintain, I want to centralize my source[/color][/color][/color]
code[color=blue][color=green]
> > and[color=darkred]
> > > in
> > > > > the same time I want to use many methods of the base classes, that[/color]
> > means[color=darkred]
> > > I
> > > > > want to use all the protected methods that the controls offer to[/color][/color][/color]
me[color=blue][color=green][color=darkred]
> > > > because
> > > > > OnPaintEx needs those.
> > > > >
> > > > >
> > > > >
> > > > > Really, here is only one example, the reality is that is a lot of[/color]
> > source[color=darkred]
> > > > > code that I "should" implement on every Control, I don't want to[/color][/color][/color]
do[color=blue][color=green][color=darkred]
> > > that.
> > > > >
> > > > >
> > > > >
> > > > > Thanks, the answers will be really appreciated.
> > > > >
> > > > > Gustavo.
> > > > >
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >[/color]
> >
> >[/color]
>
>[/color]
Comment