私はいくつかの基本クラスとそれから派生するものを含むクラスライブラリを持っています。このクラスライブラリでは、多形性を利用して、自分がやりたいことをやっています。今では、消費するアプリケーションで、子クラスの実行時の型に基づいていくつかのコードの動作を変更したいと思います。だから、次のことを想定します。拡張メソッドによる多型?
public class Base { }
public class Child1 : Base { }
public class Child2 : Base { }
を今、私は(次のクラスのすべてが消費するアプリケーションであり、クラス・ライブラリで参照することができないことに注意)次のように何かをしたい消費するアプリケーションで:
public interface IMyInterface1 { }
public interface IMyInterface2 { }
public static class Extensions
{
public static void DoSomething(this Base myObj, Object dependency)
{
}
public static void DoSomething(this Child1 myObj, Object dependency)
{
IMyInterface1 myInterface = dependency as IMyInterface1;
if (myInterface != null)
{
//Do some Child1 specific logic here
}
}
public static void DoSomething(this Child2 myObj, Object dependency)
{
IMyInterface2 myInterface = dependency as IMyInterface2;
if (myInterface != null)
{
//Do some Child2 specific logic here
}
}
}
UPDATE:
これは動作しません。これは、常に、基本クラスの拡張メソッドを呼び出します。私はこれを行うことができ、実行時の型を明示的にチェックする必要を避けることができる他の方法がありますか?その理由は、Base
から派生したクラスが追加され、対応する拡張メソッドが他の外部アセンブリから来る可能性があるからです。
ありがとうございます。
は、なぜあなたは、その後、必要に応じて何が悪かったのかの詳細を聞いて、最初にそれを試してみませんか? –
これでOKです。 – Kassem
これは動作しません。拡張メソッドが静的にディスパッチされます。 – SLaks