このトピックについてはたくさんの質問がありますが、少し変更したバージョンがあります。
次のコードがあります。
interface IFoo { }
interface IBar : IFoo { }
class Foo : IFoo { }
class Bar : IBar { }
bool Implements_IFoo(Type type) { /* ??? */ }
さて、話のひねり:Implements_IFoo
TypeがIFooのみを実装し、IFooから派生したインターフェイスを実装していない場合にのみ、メソッドはtrueを返す必要があります。ここで説明するために、この方法のいくつかの例を示します。
Implements_IFoo(typeof(Foo)); // Should return true
Implements_IFoo(typeof(Bar)); // Should return false as Bar type
// implements an interface derived from IFoo
IFooから派生した多数のインターフェースが存在する可能性があり、それらの存在について必ずしも知っているとは限らないことに注意してください。
明らかな方法は、リフレクションを介してIFooから派生したすべてのインターフェイスを検索し、typeof(Bar).GetInterfaces()がそこに存在するもののいずれかであるかどうかを確認することです。しかし、誰かがもっとエレガントな解決策を思い付くことができるかどうか疑問に思いました。
PS質問は、クラス()でこのチェックを使用することがわかったコードに由来しますif(obj.GetType() == typeof(BaseClass)) { ... }
。現在、その特定のコードでクラスをインターフェースに置き換えています。また、念のため、このチェックをブールフラグとして実装しているため、この質問は純粋に仮説です。