2012-07-06 3 views
0

Есть ли способ получить код, подобный этой «Тест»;Оцените, имеет ли элемент управления тип родителя во время выполнения

DecendedTextBox myControl = new DecendedTextbox(); 

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

Дело в том, что мне нужно, чтобы увидеть, если MyControl наследует от типа, что у меня нет ссылки на время компиляции.

ответ

1

Если у вас нет ссылки на тип, вы можете сделать это:

DecendedTextBox myControl = new DecendedTextbox(); 

if (myControl.GetType().Name == "TextBox") 
{ 
    Debug.WriteLine("Test"); 
} 

Если вы хотите знать полное имя типа, в том числе имен, вы можете использовать GetType().FullName

As насколько проверять, если он наследует от типа, что-то вроде этого:

DecendedTextBox myControl = new DecendedTextbox(); 
Type typeToCheck = Type.GetType("TextBox"); 
if (myControl.GetType().IsSubclassOf(typeToCheck)) 
{ 
    Debug.WriteLine("Test"); 
} 

Обратите внимание, что Type.GetType принимает AssemblyQualifiedName, так you'l Мне нужно знать полное имя типа.

+0

Но это не будет правдой. myControl.GetType(). Имя возвращает «DecendedTextbox». – Vaccano

+0

Оформить заказ. – rossipedia

+0

Спасибо за этот ответ! Это было именно то, что мне нужно! – Vaccano

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; 
} 
Смежные вопросы