在运行时评估控件是否为父类型

时间:2012-07-06 19:25:59

标签: c# inheritance runtime

有没有办法获得像这样的打印“Test”的代码;

DecendedTextBox myControl = new DecendedTextbox();

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

这里的要点是我需要查看myControl是否继承了我在编译时没有引用的类型。

2 个答案:

答案 0 :(得分: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.GetType需要AssemblyQualifiedName,因此您需要知道完整的类型名称。

答案 1 :(得分: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;
}