0

有没有办法得到这样的代码打印“测试”;

DecendedTextBox myControl = new DecendedTextbox();

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

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

4

2 回答 2

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,因此您需要知道完整的类型名称。

于 2012-07-06T19:28:35.310 回答
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 回答