如何在父类中引用子类中的特有类型 (如 子类form上关于某个表的TableAdapter),目前思路是在父类中添加遍历子类中的所有东西(如 遍历继承form上的所有控件),找到需要的之后,把它转化会需要的类型使用它.是不是可以使用反射之类的这个object转化为需要的类型. 
代码如下: 
//父类中遍历子类form上的控件,并使用它的 
private void findcontrol(Control.ControlCollection controls) 

    foreach (Control ctrl in controls)//类似这样遍历子类中的控件或组件
    { 
        if (ctrl.GetType().Name == "客户TableAdapter")//客户表单上某个表的TableAdapter 
        { 
            //把ctrl强类型化为客户TableAdapter来使用 
              //例 客户TableAdapter.Update(客户DataTable); 
            //让ctrl像,客户TableAdapter那样用 
        } 
            findcontrol(ctrl.Controls); 
    } 
}

解决方案 »

  1.   

    private void findcontrol(Control.ControlCollection controls) 

        foreach (Control ctrl in controls)//类似这样遍历子类中的控件或组件 
        {
            //假设客户表单上某个表的TableAdapter的实际类型为MyControl
            MyControl c=ctrl as MyControl;//转换成实际类型,如果不能转换则为null
            if(c!=null&&c.GetType().Name == "客户TableAdapter")//客户表单上某个表的TableAdapter 
            //if (ctrl.GetType().Name == "客户TableAdapter")//客户表单上某个表的TableAdapter 
            { 
                //把ctrl强类型化为客户TableAdapter来使用 
                  //例 客户TableAdapter.Update(客户DataTable); 
                //让ctrl像,客户TableAdapter那样用 
            } 
                findcontrol(ctrl.Controls); 
        } 

    要想调用子类的方法,必须将指向子类的父类引用转换成子类才行的。
      

  2.   

    父类只知道要调用的是MyControl这个类型(现在这个是个字符串,因为无法定义一个MyControl的接口出来),在父类中没有MyControl这个类型,那有没有其它办法让她转化为实际类型?
      

  3.   

    就是比如这个 客户TableAdapter的实际类型无法确定,她跟sqldataadapter又有点区别,这个是我在项目里添加了数据源之后才有的类型.
      

  4.   

    现在有两个问题:
    1.子form上的这个XXTableAdapter怎样才能遍历到,遍历form上的控件和组件都遍历不到
    2.请问怎么判断XXTableAdapter的实际类型,用的是sql的连接,可是怎么判断她到底是不是sqldataadpter类型呢?
      

  5.   


    第一个问题,XXTableAdapter没有加到Form里去,所以找不到.第二个问题,用is关键字.或者用GetType()方法,都可以.