0

この print "Test"; のようなコードを取得する方法はありますか?

DecendedTextBox myControl = new DecendedTextbox();

if (myControl is "TextBox")
{
   Debug.WriteLine("Test");
}

ここでのポイントは、コンパイル時に myControl が参照していない型から継承されているかどうかを確認する必要があるということです。

4

2 に答える 2

1

Typeリフレクションを介して参照を引き出すことを避ける必要がある場合は、継承ツリーをクロールできます。

public static bool IsTypeSubclassOf(Type subclass, string baseClassFullName)
{
    while (subclass != typeof(object))
    {
        if (subclass.FullName == baseClassFullName)
            return true;
        else
            subclass = subclass.BaseType;
    }
    return false;
}
于 2012-07-06T19:42:18.653 に答える
1

タイプへの参照がない場合は、次のようにすることができます。

DecendedTextBox myControl = new DecendedTextbox();

if (myControl.GetType().Name == "TextBox")
{
   Debug.WriteLine("Test");
}

名前空間を含む完全な型名を知りたい場合は、次を使用できますGetType().FullName

タイプから継承されているかどうかを確認する限り、次のようになります。

DecendedTextBox myControl = new DecendedTextbox();
Type typeToCheck = Type.GetType("TextBox");
if (myControl.GetType().IsSubclassOf(typeToCheck))
{
   Debug.WriteLine("Test");
}

Type.GetTypeAssemblyQualifiedNameを受け取るため、完全な型名を知る必要があることに注意してください。

于 2012-07-06T19:28:35.310 に答える