C# 4.0 は、オーバーライドのパラメーターで共分散 (「in」キーワードを使用) をサポートしていないようです。そうですか?
もしそうなら、これを行うためのよりエレガントな方法はありますか?
環境
public interface IBaseEvent { /* ... */ }
public interface IDerivedEvent : IBaseEvent { /* ... */ }
public class MoreDerivedEvent : IDerivedEvent { /* ... */ }
を処理する一連のクラスがありMoreDerivedEvent
ます。イベント処理コードの制限により、 のイベント ハンドラーを 1 つしか登録できず、MoreDerivedEvent
インターフェイスの登録をイベントとして処理するかどうかもわかりません (ガイダンスではクラスを明示的に使用するため、処理されるとは思いません)。 )。したがって、イベントを適切に処理するために、次のようにハンドラーを定義しました。
public class BaseType
{
protected virtual void Handle(IBaseEvent @event) { /* Do Base Stuff */ }
}
public class DerivedType
{
protected virtual void Handle(IDerivedEvent @event)
{
/* Do Derived Stuff */
Handle((IBaseEvent)@event);
}
protected override sealed void Handle(IBaseEvent @event)
{
base.Handle(@event);
}
}
これは明らかに真の継承を提供しません。この問題を解決できない場合はDerivedType
、派生した型をフラット化するだけです。BaseType
しかし、最初に Stack Overflow コミュニティに投稿することにしました。