定义了一个规则类,属性字段相同并且都还有一个parse 方法,但各对象的 parse 防范实现上稍有差别。如果不定义子类,能在对象创建的时候改写 parse 方法吗? 
class rule
{
  private string _title = "";
  private string _regex = "";
  
  public string tilte
  {
    get{return this._title;}
    set{this._title = value}
  }  ......  public string parse(string input)
  {
    string output = "";
    return output;
  }
}
......public ArrayList ruleNode = new ArrayList();
rule tmp = new rule();
tmp.title = "title1";
//tmp.parse  方法不同示例稍有不同,能有办法改写吗?
ruleNode.add(tmp);rule tmp = new rule();
tmp.title = "title2";
//tmp.parse  方法不同示例稍有不同,能有办法改写吗?
ruleNode.add(tmp);
......另外想到的一种方案是,将 parse 也定义成字符串属性,通过在线编译来实现执行不同的效果。 还有其他方案吗?

解决方案 »

  1.   

    创建rule的父类,每个实现下面有不同的parse
    要么就传参数,parse里面有switch
      

  2.   

    如果将规则创建为很多子类,使用时遍历 ArrayList ruleNode,如何强制转换类型? foreach (??? tmp in analyser.ruleNode)
    {
    }
      

  3.   

    foreach (rule tmp in analyser.ruleNode)
    {
       ((rule1)tmp).parse()
    }??
      

  4.   


    ruleNode 里面对象很多,如果他们是不同的子类,不可能分得清的,也不可能像这样转换:
    ((rule1)tmp).parse()    该转换成 ruleX 呢?
      

  5.   

    if(tmp is ruleX)
       ((ruleX)tmp).parse()
      

  6.   

    ruleX 很多,真不方便逐个判断。
      

  7.   

    用List<rule> ltrule=new List<rule>();
    ltrule.Add(rule1);
    ltrule.Add(rule2);
    foreach(rule r in ltrule)
    {
      r.parse();//无参数的话r不需要转换成你想要的
    }