> 2010/12/19 Benoît Minisini <gam...@users.sourceforge.net>: > > Tell me the important things I forgot, because I am sure I have forgotten > > things. > > > > Not the small bugs, but the features that may change the language syntax > > or the interface of some components. > > Hi Benoît. I think that a "mecanism" for automatic and selective > sharing of public methods, properties and events from objects that are > members of another, to it's container object, will be useful. > > Example. The ValueBox is compound for a TextBox, but the interface of > TextBox isn't shared with ValueBox, nothing at all. If I want to share > the complete interface of TextBox with ValueBox I should use > inheritance, but there's no an automatic way to share partially and > automatically the interface of TextBox to ValueBox because TextBox is > a member of ValueBox (composition). So, this should be done manually, > repeating the mayor part of interface of TextBox in ValueBox (there's > no big deal in this case, but in others could be). > > Note: when a control is based on Control or UserControl through > inheritance, some properties inherited (maybe methods too) have no > sense in the new control, but inheritance have no way to anulate some > members in the subclass, is all or nothing. In similar way composition > or association forces to make public the member that "is part" or "is > used", allowing access to it's complete interface (and, again, this > many times haven't sense) or make it private, preventing access > absolutely. (Containers are a special case that breaks the > encapsulation through the collection "Children"). An new mecanism for > selectively share part of interface of the an object for > > May be would be useful can do something like that: > > ' Inside ValueBox class > shareInterface(TextBox, ValueBox, noneExcept, Name, X, Y, W, H, ..., > Click, KeyPress, ... , Refresh, Resize, ...) > > shareInterface(TextBox, ValueBox, allExcept, Text, Password, ... ) > > 'Syntax > shareInterface(FromClass, ToClass, { allExcept | noneExcept } , > [properties] [events] [methods] ) > > > A name conceptually more accurate could be "Delegate" > > 'Syntax > Delegate(ToClass, FromClass, { allExcept | noneExcept } , [properties] > [events] [methods] ) > > > > Good or crazy idea?
You can't "remove" something in inheritance, because if B inherits A, then B is an A. So if the method m() (or a property) applies to A, it must applies to B too. Having to reimplement the interface in the composition case does not shock me. If you really want inheritance, use inheritance. But I admit it's a boring thing to write. Maybe a delegation mechanism could be implemented, but not in Gambas 3 I think. Note: delegation needs an object. For example, ValueBox will use its inner TextBox as a delegate. I'm currently implementing a Proxy class that allows to automatically delegate events from one object to another one. But the result is not beautiful. I must think about all that... -- Benoît Minisini ------------------------------------------------------------------------------ Lotusphere 2011 Register now for Lotusphere 2011 and learn how to connect the dots, take your collaborative environment to the next level, and enter the era of Social Business. http://p.sf.net/sfu/lotusphere-d2d _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user