2009-10-05 5 views
23

I以下の場合があります。今が実装

public interface IPerson { .. }  
public class Person : IPerson { .. }  
public class User : Person { .. } 

と、 「User」オブジェクトがある場合、これが反射を使用してIPersonを実装するかどうかをどのように確認できますか?より正確には、プロパティ「SomeUser」を持つ可能性のあるオブジェクトがあります。これは、インタフェース「IPerson」を実装するいくつかのタイプでなければなりません。私の場合、私は実際にユーザーを持っていますが、これは私がリフレクションを通してチェックしたいものです。 ...私はそれが「ユーザー」であるため、プロパティの種類を確認する方法を見つけ出すことはできませんが、私はそれがIPersonを実装しているかどうかを確認したい:

var control = _container.Resolve(objType); // objType is User here 
var prop = viewType.GetProperty("SomeUser"); 
if ((prop != null) && (prop.PropertyType is IPerson)) 
{ .. } 

(これは私の単純化であることに注意してください実際の場合ですが、ポイントは同じである必要があります...)

+4

すでにオブジェクトインスタンスがある場合は、オブジェクトが特定のインタフェースを実装しているかどうかを確認するためにリフレクションを必要としません。 'if(objUser is IPerson)'を確認するだけです。 –

+0

0xA3のコメントに正解がないのですか? – itchi

答えて

13
var control = _container.Resolve(objType); 
var prop = viewType.GetProperty("SomeUser"); 
if ((prop != null) && (prop.PropertyType.GetInterfaces().Contains(typeof(IPerson))) 
{ .. } 
+0

ありがとう、しかし、私はType.IsAssignableFromと一緒に行くつもりだと思う。 – stiank81