我可以从基类参数中识别子类吗?

时间:2010-07-01 07:14:28

标签: c# winforms visual-studio-2008

看看以下内容。接近代码末尾的问题 - 在“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 个答案:

答案 0 :(得分:3)

您可以使用关键字is检查。

此外,您可能希望使用polymorphism而不是检查类型来解决问题。

答案 1 :(得分:2)

有几种方法可以做到这一点:

  • 正如您所猜测的那样,您可以使用“是”关键词,如Sjoerd所提议的那样
if (theForm is frmTestForm1)
   doThis();
//So on
  • 另一种方法是使用反射来获取您拥有的表单的确切类型。你的代码应该像这样:
  

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

第一种方法的缺点是,例如,如果您的frmTestForm2是frmTestForm1的派生,并且您使用类似if(yourform is frmTestForm1)的代码,并且您的表单指向frmTestForm2实例,则“is”关键字将返回true。

答案 2 :(得分:0)

你试过这个并没有用吗?尝试从对象获取类型没有问题。虽然您将其作为基类型发送,但该对象仍然是派生类类型。

答案 3 :(得分:0)

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