このトピックに関する質問はたくさんありますが、少し変更されたバージョンがあります。クラスが特定のインターフェイスを実装しているかどうかを確認する
私たちは、次のコードを持っている:今
interface IFoo { }
interface IBar : IFoo { }
class Foo : IFoo { }
class Bar : IBar { }
bool Implements_IFoo(Type type) { /* ??? */ }
、物語のツイスト:タイプだけではなくIFoo由来のいずれかのインターフェイスIFooを実装する場合にのみtrueを返すImplements_IFoo
方法を。そこIFoo由来の多数のインタフェースすることができ、あなたが必ずしも彼らの存在について知らないことを
Implements_IFoo(typeof(Foo)); // Should return true
Implements_IFoo(typeof(Bar)); // Should return false as Bar type
// implements an interface derived from IFoo
注:ここで説明するために、この方法のいくつかの例があります。
明白な方法は、反射を通してIFooから派生したすべてのインターフェイスを見つけて、typeof(Bar).GetInterfaces()がその中に存在するものだけをチェックすることです。しかし、私は誰かがより洗練されたソリューションを考え出すことができるかどうか疑問に思っていました。
PS質問は私がクラス(if(obj.GetType() == typeof(BaseClass)) { ... }
)でこのチェックを使用することがわかったいくつかのコードから発生します。私たちはインターフェイスを持つクラスをその特定のコードに置き換えています。また、ちょうどその場合 - 私はブール値のフラグとしてこのチェックを実装しているので、この質問はまったく仮説的なものです。
最初にこの種のイントロスペクションが必要なのは本当に不思議です。デザインが間違っている可能性があります。 – tdammers
次回のコメントをする前に、最後まで質問を読んでください - これは仮説的な質問であると私はすでに説明しました;) – Jefim