If you want your interface to provide, not just default implementations,
but methods your classes should not need to implement they self, use
virtual methods, you can provide an implementation for this method your
derived classes don't need to implement but inherited. Static methods can
be used to be reused if you want.
El feb. 28, 2016 4:31 PM, "Felipe Lavratti" <felipe...@gmail.com> escribió:

> Even better, try this main instead the previous:
>
> int main () {
>
>     IMixinInterface fooer = new NothingSpecialFooer();
>     fooer.foo();
>
>     fooer = new TheSpecialFooer();
>     fooer.foo();
>
>     return 0;
> }
>
> Here we use the interface as the type of the object to show
> polymorphism with mixin happening.
>
> It prints:
>
> $ ./test
> ** Message: test.vala:5: fooed defaulty!
> ** Message: test.vala:13: dummy string
> ** Message: test.vala:22: fooed specially!
>
>
>
> On Sun, Feb 28, 2016 at 7:24 PM, Felipe Lavratti <felipe...@gmail.com>
> wrote:
> > Right, I see what u are asking now.
> >
> > Well, if you want to do Mixins in Vala, you'll have to do the "static"
> > workaround, since it doesn't support by default:
> >
> https://wiki.gnome.org/Projects/Vala/Tutorial#Mixins_and_Multiple_Inheritanae
> >
> > Now you want to do Mixing with Generics? Ok, add the generic argument to
> > each  Mixin method of your interface:
> >
> > public interface IMixinInterface : Object {
> >     public abstract void foo();
> >
> >     public static T default_fooing<T>(T arg) {
> >         GLib.message("fooed defaulty!");
> >         return arg;
> >     }
> > }
> >
> > public abstract class BaseFooer : Object, IMixinInterface {
> >     public virtual void foo() {
> >         var dummy_string = IMixinInterface.default_fooing<string>("dummy
> > string");
> >         GLib.message(dummy_string);
> >     }
> > }
> >
> > public class NothingSpecialFooer : BaseFooer {
> > }
> >
> > public class TheSpecialFooer : BaseFooer {
> >     public override void foo() {
> >         GLib.message("fooed specially!");
> >     }
> > }
> >
> > int main () {
> >
> >     var fooer = new NothingSpecialFooer();
> >     fooer.foo();
> >
> >     var fooer2 = new TheSpecialFooer();
> >     fooer2.foo();
> >
> >     return 0;
> > }
> >
> >
> > This example doesn't cover BaseFooer taking a generic argument, if the
> > example is not enough, please provide me more details about how is the
> > generic argument used in BaseFooer.
> >
> > - Fanl
> >
> >
>
>
>
> --
> Skype: felipeanl
>
_______________________________________________
vala-list mailing list
vala-list@gnome.org
https://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to