この print "Test"; のようなコードを取得する方法はありますか?
DecendedTextBox myControl = new DecendedTextbox();
if (myControl is "TextBox")
{
Debug.WriteLine("Test");
}
ここでのポイントは、コンパイル時に myControl が参照していない型から継承されているかどうかを確認する必要があるということです。
この print "Test"; のようなコードを取得する方法はありますか?
DecendedTextBox myControl = new DecendedTextbox();
if (myControl is "TextBox")
{
Debug.WriteLine("Test");
}
ここでのポイントは、コンパイル時に myControl が参照していない型から継承されているかどうかを確認する必要があるということです。
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;
}
タイプへの参照がない場合は、次のようにすることができます。
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.GetTypeはAssemblyQualifiedNameを受け取るため、完全な型名を知る必要があることに注意してください。