Могу ли я определить подкласс из параметра базового класса? - PullRequest
0 голосов
/ 01 июля 2010

Посмотрите на следующее.Вопрос в конце кода - в функции 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
    }
}

Ответы [ 4 ]

3 голосов
/ 01 июля 2010

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

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

2 голосов
/ 01 июля 2010

Есть несколько способов сделать это:

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

if (theForm.GetType (). UnderlyingSystemType == typeof (frmTestForm1)) doThis ();

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

0 голосов
/ 01 июля 2010
if (theForm.GetType().ToString() == typeof(frmTestForm1).ToString())
{
    // Do your stuff
}
0 голосов
/ 01 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...