在项目中碰到个问题,现在求教大虾们。
有一个第三方工具,定时执行Service,后来由于定时功能块出现问题,现在需要写一个Console来直接执行该Service(直接引用的原Service.exe),也就是不需要定时执行的功能了,但原Service中的执行方法全是Private,所以暂时想不到什么好的方法可以调用原Service中的,请问哪位大虾可以提出一个好的思路,最好不要整个Service全重写。

解决方案 »

  1.   

    写几个public的方法把原来private的方法封装了公布出来
      

  2.   

    楼上的意思还是相当于把整个文件给写一篇,只是把类型从Private改成Public,不然你只写几个Public的话,肯定后面调用其他方法,还是要全部重新写一篇。
      

  3.   

    用反射直接调用private方法,不过这样做就无法靠编译器帮你检查调用错误了。
      

  4.   

    不用全部重写嘛,比如这样priv
    private void DoSomething()
    {
        //...
        //...
        //...
    }public void DoSth()
    {
        DoSomething();
    }
      

  5.   

    你这方法应该是适合修改原来代码吧?
    我是直接引用的原Service.exe,而我又不能去动原来Service.exe里面的代码,只能另外写,而另外写就会出现很多问题,方法倒好说,但原文件里面的那些控件之类的就不好控制了。唉,头痛啊
      

  6.   

    计划任务啊。定时执行cmd命令
      

  7.   


    现在就是由于定时执行模块出现问题(VB),所以需要用一个console程序来直接执行该程序,但原程序中方法全是Private型,而且不能修改原程序Service.所以不知道怎么直接调用执行功能块,整个文件重写呢,但又有更多的问题,比如控件申明,逻辑结构等问题。
      

  8.   


    这个肯定是不行的了。。不然就违背面向对象了。。既然有pubic private这些关键字,肯定是有他的作用。。
    面向对象语言唯一处理这种情况的方式就是"重写"原来类中的方法。。这里又有问题了,“重写”的话,原类中的方法必须是虚函数。虚函数默认就是public(好像是这样,说的不对清原谅)所以你现在只有“重新写”而不是重写。个人理解,说的不对清指教
      

  9.   

    回12楼我说的另外写意思就是你的”重新写“,只是原service是VB,而我用reflector反编译过来是C#,所以有很多语法错误,而更头痛的是全是些Private方法,现在重新写这个方法也挂掉了,现在只有想个办法来实现事件模拟,也就是说原Service可以直接点击执行,也就是不要以前的定时执行功能。
    现在如果能写个console程序来定时模拟一下原Service的Button点击事件,也能达到原需求。但这样就会涉及到WinForm以及很多Windows的API函数。可惜不熟悉,谁能写下?