C#:从控制台应用程序调用方法

时间:2016-09-21 10:13:31

标签: c# console

我有一个控制台应用程序,用于从WS导入内容。

我对控制台应用很陌生,所以我有一个问题。

Project包含一个名为Importer.cs的类。该类有一个名为Initialize()的方法:

class Importer
{
    static void  Initialize()
    {
        //here i connect to the server etc.
    }
}

现在我希望能够像我这样打电话给我的APP:

Importer.exe Initialize

所以它应该调用Initialize方法,然后我希望能够继续使用例如:

Importer.exe StartImport

我已经使用了args []参数,但我现在已经陷入困境。

3 个答案:

答案 0 :(得分:1)

使用类似CommandLineParser的库,然后使用Reflection将这些方法称为MethodInfo对象。

答案 1 :(得分:0)

在您的控制台应用程序中,查看解决方案资源管理器(在VS的右侧窗口中显示所有文件)。找到一个名为PROGRAM.CS的程序。打开它并寻找:

  static void Main(string[] args)
    {

    }

在里面,把这个:

    static void Main(string[] args)
    {
       //This starts a new instance of the Importer Class
       Importer myImporter = new Importer();
       //This calls the Initialize Method within Importer
       Importer.Initialize();
       //This calls the StartInput() Method within Importer
       Importer.StartInput();    
       //Use Console.ReadLine() as the last line in this method to keep your screen open after program execution ends.
       Console.ReadLine();       
    }

您的控制台应用程序首先在控制台应用程序中运行Main()。

然后,您只需使用F5测试项目。测试完成后,通过双击EXE文件来构建项目并运行。

答案 2 :(得分:0)

根据您正在做的事情,这可能甚至不起作用。我想象一种情况,你Initialize()和之后StartImport(),但在这两个调用之间,程序已经完成,初始化状态消失了。如果你没有像Initialize()这样的方法,而是原子命令,那么你的方法原则上是可行的。

但是出现了一个问题:这是通用的吗?我的意思是:说,你添加另一种方法。您是否希望通过自动建立的子命令访问该方法,或者您不介意添加另一个子命令案例?第一个选择意味着,你需要对Reflection感到满意。

现在,比方说,你添加方法,由于任何原因你不能声明私有,但你不希望它们作为子命令公开。因此,您需要跟踪可见性。当然,这意味着设计不佳,但如果您遇到遗留组件,可能会发生这种情况。

现在,假设您需要Initialize()(或类似)命令。当调用下一个子命令时,它们会处理连接状态或其他任何程序,并且程序仍然需要运行,因此它可以使用初始化的信息,句柄等。那么设计控制台应用程序会不会更有意义像一个壳?因此,您将从Importer.exe开始,并询问子命令。