2010-07-01 4 views
0

Взгляните на следующее. Вопрос в конце кода - в функции «WHOAMI» ...Могу ли я определить подкласс из базового класса?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace MY_TEST_PROJECT 
{ 
    // a form class 
    public partial class frmTestForm1 : Form 
    { 
     // zillion lines of code 

     private void aFunction() 
     {   
      ClassTest.whoAmI(this); 
     } 

     // zillion lines of code 
    } 

    // another form class... 
    public partial class frmTestForm2 : Form 
    { 
     // zillion lines of code 

     private void aFunction() 
     {   
      ClassTest.whoAmI(this); 
     } 

     // zillion lines of code 
    } 

    // a home made test class 
    public static class ClassTest 
    { 
     // zillion lines of code 

     public static void whoAmI(Form theForm) 
     { 
      // IS THERE A WAY TO SEE WHAT KIND OF FORM theForm IS? 

      // LIKE: 
      // if (theForm IS A frmTestForm1) 
      // doThis(); 
      // else if (theForm IS A frmTestForm2) 
      // doThat(); 
     } 

     // zillion lines of code 
    } 
} 

ответ

3

Вы можете проверить с помощью ключевого слова is.

Кроме того, вы можете решить вашу проблему, используя polymorphism вместо проверки типа.

+0

"if (theForm is frmTestForm1)" работает нормально! Благодаря!!! –

0

Пробовал ли вы это, и он не работает? Нет никакой проблемы с попыткой получить тип от объекта. Хотя вы отправляете его в качестве базового типа, объект по-прежнему является производным типом класса.

2

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

  • , как вы уже догадались, вы можете использовать "это" ключевое слово, как Сьерд предложил
if (theForm is frmTestForm1) 
    doThis(); 
//So on 
  • Другой подход - использовать отражение, чтобы получить ex тип действия формы, которую вы имеете. Ваш код должен выглядеть Somthing так:

если (theForm.GetType() UnderlyingSystemType == TypeOf (frmTestForm1).) doThis();

Недостаток первого подхода заключается в том, что если, например, ваш frmTestForm2 является производным frmTestForm1 и использовать код, как этот if(yourform is frmTestForm1) и ваша форма указывает на экземпляр frmTestForm2 «это» ключевое слово возвращает истину.

+0

Хорошо, хорошо знать вещи! –

0
if (theForm.GetType().ToString() == typeof(frmTestForm1).ToString()) 
{ 
    // Do your stuff 
} 
+0

Я не знал о 'UnderlyingSystemType', который использует Koynov. Теперь я предпочитаю его ответ. – Miel

Смежные вопросы