是这样的,我继承了DataGridView生成一个新的 dwgrid 控件,并且增加了好多函数。但是,当我把这个新的 dwgrid 控件放到 Form1 上时,能否在 Form1 上重写(override) dwgrid 里的函数?

解决方案 »

  1.   

    能否在 Form1 上重写(override) dwgrid 里的函数?不可以!
      

  2.   

    那如果 dwgrid 中的函数,对大部分 Form 来说是合理的。但是正好对于某几个 Form 是不允许的,也就是说,在这几个 Form 中,我想屏蔽掉或者重写相应的函数,应该怎么做?
      

  3.   

    这样岂不是很麻烦在一个大概有500个Form中,按照这样的做法,估计会派生出二三是个 dwgrid ,这样的话,是不是太麻烦了?有没有更好的解决方案?
      

  4.   

    公开几个开关property,用于控制方法的执行
    比如public bool IsXXXApplicable{get;set;}void XXX(){
    if(!IsXXXApplicable){
    return;
    }
    //otherwise, do the work
    }
    对于不需要调用XXX的Form就设置_grid.IsXXXApplicable = false;不过这样就违反了很多OO的原则。
    建议楼主学习下Decorator模式,来解决这个问题
      

  5.   

    想了好久,还是把相关的处理函数写到它的父级Form对象了。这样,每派生一个新的 Form ,如果有什么要屏蔽或者重写的,就直接 override 好了。对于编写数据库应用程序模板来说,觉得还是不够方便。有时候OO作为一个标准或原则,但并不是所有的标准和原则都是合适的。用惯了PB设计模板,精练的模板,可以做到派生的新功能窗口只需要画一个datawindow就搞定了。正如数据库的范式,如果你设计过有些表的数据超过一亿行的时候,你偶尔也会觉得对这些表进行关联其实是不可行的。好了,继续 C# 模式吧!将就一点了,呵呵!