我在编写函数时,经常遇到这样一种情况:函数的内容相同,只有参数的类型和返回值的类型不同,我就写了很多的重构函数,觉得很痛苦,也占空间,我就觉得要是可以把数据和类型一起传递给函数,就不要写这么多重构了,有什么方法吗?
  
     请进来的各位高手,发表一下自己的看法!谢谢

解决方案 »

  1.   

    LZ其实~~~~~~~牛人一个。
    输入:(C++的思想)用IntPtr传递进来,Marshal成相应的类/结构/参数。(Java思想)用Object/ArrayList传递进来,用is判断,然后类型强转。
    输出:可以考虑用Object返回,用is 来判断是何种类型。
      

  2.   

    "我就觉得要是可以把数据和类型一起传递给函数,"  object somemethod(Type sometpye)  返回结果调用object.tpye可以只道真正的类型
      

  3.   

    貌似不行吧  要么用PARAMS吧
      

  4.   

    楼主看过这个没?
    public void UnZip(string  zipFileName,  string  extractLocation,  string  password,  bool  overWrite)  
    {  
    #region  realization
    #endregion  
    }  
    public void UnZip(string  zipFileName,  string  extractLocation,  string  password)
    {  
    this.UnZip(zipFileName,  extractLocation,  password,  true);
    }  
    public void UnZip(string  zipFileName,  string  extractLocation,  bool  overWrite)    
    {  
    this.UnZip(zipFileName,  extractLocation,  "",  overWrite);
    }  
    public void UnZip(string  zipFileName,  string  extractLocation)
    {  
    this.UnZip(zipFileName,  extractLocation,  "",  true) ;
    }  4个方法都是一样的,只是参数不同。但是他们只有1个方法真正有逻辑,其它都是调用关系而已。系统写这么多的重构函数,是给调用者的方便而不是给被调用者方便
      

  5.   

    举个我遇到的例子:entity1,entity2,entity3,.....entityn 都是不同的实体类
    entity1 add(entity1 a,entity1b)
    {return a+b;}
    entity2 add(entity2 a,entity2 b)
    {return a+b;}
    entity3 add(entity3 a,entity3 b)
    {return a+b;}
    .
    .
    .
    entityn add(entityn a,entityn b)
    {return a+b;}
    就像这样的一些函数,具有的功能都是一样的,只是类型不一样,多发愁呀
      

  6.   

    呵呵,这个可以试着这样Object add(Object a, Object b)
    {return a+b;}

    Object add(Object a, Object b)
    {
       entity ea = (entity)a;
       entity eb = (entity)b;
       return ea + eb;
    }不知道结果会怎么样。
      

  7.   

    .net 2.0 不是提供范型了吗
    连类型也省略了,只传值
    (说错了别怪呀)
      

  8.   

    用泛型啊,这种情况可以结合STL
      

  9.   

    把参数类型定义成object的,在函数里面switch, 至于返回值,类型不同不能做为重载的理由.
      

  10.   

    用泛型可以,
    或者从entity1,entity2,entity3,.....entityn抽取出一个基类,将+运算放在基类中。
      

  11.   

    STL (Stand Template Library)
      

  12.   

    你写重载类不就是为了让上层类调用方便吗,为了让上层方便,自让你需要多干点活了,如果你用List之类的东西,你是少干了,但上层需要多做点,这是能量守恒定律。
      

  13.   

    同意liangxf0022(小新) 的说法系统写这么多的重构函数,是给调用者的方便而不是给被调用者方便顶一下
      

  14.   

    使用params 参数。。
    Fun(params object[] para)
    {
    }
      

  15.   

    object是引用类型的,要是遇到值类型呢?
      

  16.   

    object不是引用类型,值类型和引用类型都从object继承。