有没有办法得到这样的代码打印“测试”;
DecendedTextBox myControl = new DecendedTextbox();
if (myControl is "TextBox")
{
Debug.WriteLine("Test");
}
这里的重点是我需要查看 myControl 是否继承自我在编译时没有引用的类型。
有没有办法得到这样的代码打印“测试”;
DecendedTextBox myControl = new DecendedTextbox();
if (myControl is "TextBox")
{
Debug.WriteLine("Test");
}
这里的重点是我需要查看 myControl 是否继承自我在编译时没有引用的类型。
如果您没有对该类型的引用,您可以这样做:
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,因此您需要知道完整的类型名称。
如果您需要避免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;
}