有没有办法获得像这样的打印“Test”的代码;
DecendedTextBox myControl = new DecendedTextbox();
if (myControl is "TextBox")
{
Debug.WriteLine("Test");
}
这里的要点是我需要查看myControl是否继承了我在编译时没有引用的类型。
答案 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;
}