質問

次のコードを検討してください:

public class A 
{
}  

public class B : A 
{
}  

public class C : B 
{
}  

class D  
{  
    public static bool IsDescendantOf(this System.Type thisType, System.Type thatType)  
    {  
        /// ??? 
    } 

    void Main()
    {
        A cValue = new C();
        C.GetType().IsDescendantOf(cValue.GetType());
    }
}

IsDescendantOfを実装する最良の方法は何ですか?

役に立ちましたか?

解決

Type.IsSubclassOf()は、現在のTypeによって表されるクラスは、指定されたTypeによって表されるクラスから派生します。

他のヒント

おそらく Type.IsAssignableFrom を探しています。 。

これはあなたの質問に直接答えないことはわかっていますが、例のメソッドの代わりにこれを使用することを検討するかもしれません:

public static bool IsDescendantOf<T>(this object o)
{
    if(o == null) throw new ArgumentNullException();
    return typeof(T).IsSubclassOf(o.GetType());
}

したがって、次のように使用できます:

C c = new C();
c.IsDescendantOf<A>();

また、Type.IsSubclassOfとType.IsAssignableFromの違いに関する質問に答えるには、IsAssignableFromは2つのオブジェクトaとbがあり、これが有効であるという意味で弱いです。

a = b;

Then typeof(A).IsAssignableFrom(b.GetType())はtrue-ですので、aはbのサブクラス、またはインターフェース型になります。

対照的に、 a.GetType()。IsSubclassOf(typeof(B))は、aがbのサブクラスである場合にのみtrueを返します。拡張メソッドの名前を指定すると、IsAssignableの代わりにIsSubclassOfを使用する必要があります;

この Type.IsSubclassOf( )

編集:

要件はわかりませんが、それが最善の方法かもしれません:

bool isDescendant = cValue is C;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top