Skip to end of metadata
Go to start of metadata

You are viewing an old version of this content. View the current version.

Compare with Current View Version History

« Previous Version 7 Next »

Unknown macro: {remotion-mixins-disclaimer}

What if we want a really professional stage animal for
theatrical performance? Then it is important to speak LOUD – all
uppercase, that is. We implement LOUD by overriding the Say ()
method and uppercasing the argument string s. This in turn requires
access to the base method in the mixin – enter Base.

In contrast to the TThis parameter introduced in the previous
section, you can't use a class for the TBase parameter, you
MUST use an interface at run-time.

Right: Mixin<Parrot, IParrot> or Mixin<IParrot, IParrot>
Wrong: Mixin<Parrot, Parrot> or Mixin<IParrot, Parrot>

For the following implementation

  • we override the Parrot's (or IParrot's, respectively) Say method
    with one that uppercases the string s and calls the overridden (base)
    method with that LOUD string
  • we make the Parrot's Say method virtual, so that it can be overridden
  • we access the base Say () via the Base property – Base.Say ()
  • the Base property is provided by the interface IParrot as parameter
    for TBase

Here is an illustration.

If you run the client code

// Don't forget the popsicle to prop up the 'Remotion' assembly
var t = typeof (IMixinTarget);

var myPetParrot = ObjectFactory.Create<Parrot> (ParamList.Empty);
((IOnThePhoneMixin) myPetParrot).PretendToTalkOnThePhone ();

the output will look like this:

Output

Method called

"RING RING"

Say ()

"RING RING"

Say ()

"HALLOHO?"

Say ()

"OH! HI!"

This.Say ()

"I'm fine! And yourself?"

Base.Say ()

"Glad to hear that! I love you! Bye!"

Base.Say ()

Sample code

The sample code for this exercise is located at
https://svn.re-motion.org/svn/Remotion-Contrib/Samples/Mixin/WikiSamples/trunk/WikiSamples.ParrotMixinBase/Program.cs

Under the hood
  • No labels