抽象クラスのExport属性は継承クラスで再設定が必要

MonoTouchとObjective-Cランタイムとの連携は,C#で書いたメソッドにObjective−Cから見た名前をExport属性で指定して行います.
抽象クラスでアニメーション終了時にExport属性をつけたメソッドを呼び出すようにコードを書いたのですが,その抽象クラスの継承クラスではアニメーション終了時にそのメソッドが呼び出されませんでした.継承クラスでそのメソッドをオーバライドしてExport属性をつけることで,期待したとおりにメソッドが呼び出されました.

http://monotouch.net/Documentation/Binding_New_Objective-C_Typesこのあたりのドキュメントを読んでみても,継承したときの振る舞いは解説されてはいないのですが, .Netアセンブラから情報を読み出すときに使うReflectionは,メソッドなどの属性を読み出すときに,継承しているものを含むか含まないかを指定できます.ひょっとしたらExport属性は継承を見ないのかもしれません.

例) 例えば抽象クラスでExport属性をして:

abstract class SomeAbstractClass : UIView
{
  [MonoTouch.Foundation.Export("_ScrollAnimationStoppedHandler")]
  protected virtual void _AnimationStopped()
  {}
}

それを継承しただけでは,元の抽象クラスの_AnimationStopped()メソッドは呼び出されません.

class SomeImplementationClass : SomeAbstractClass
{}

継承クラスで再度_AnimationStopped()メソッドをオーバライドしてExport属性を指定すると,期待したとおり,メソッドが呼び出されます.

class SomeImplementationClass : SomeAbstractClass
{
  [MonoTouch.Foundation.Export("_ScrollAnimationStoppedHandler")]
  protected override void _AnimationStopped()
  {}
}