【问题标题】:console app question控制台应用问题
【发布时间】:2010-11-24 19:04:48
【问题描述】:

为清晰起见已更新,希望... 是的,我想知道是否有任何用例要说

Program p = new Program();

是的,我指的是带有新控制台应用程序模板的 Program 类。

在哪些用例中,您希望在 c# 控制台应用程序中实例化 Program 类?

【问题讨论】:

  • 这是一个非常笼统的问题。如果你有理由,你会实例化它吗?我猜?你有什么具体的问题吗?
  • 您能否发布一些示例代码来阐明您要查找的内容?当您说“程序类”时,您是指默认控制台模板中显示的class Program 吗?以及为什么“控制台应用程序”——因为 class Program 也出现在 WinForms 模板中(好吧,它显示为 static class Program 但你可以删除 static 并根据需要实例化它)。
  • 由于 Program 类也默认显示在 WinForms App 模板中,因此对“Console App”的引用令人困惑。

标签: c# console-application instantiation


【解决方案1】:

如果您想运行多个线程(如在服务应用程序中),每个线程都有自己的 Program 副本,那么能够:

Program p = new Program();

Main() 在这些情况下不会被自动调用。例如,如果应用程序作为服务运行,您可以创建服务线程,或者在main() 中运行一些交互式控制台代码,具体取决于应用程序的启动方式。这在调试服务时非常方便。

【讨论】:

    【解决方案2】:

    当您不需要 GUI 时 -- 当您不需要用户输入时。或者您只需要非常简单的用户输入(比如测试代码中的......)。

    如果您的应用程序将在服务器上无人看管地运行——为什么会有未查看表单的开销?

    【讨论】:

    • 你需要仔细阅读他的问题。他在问你为什么要做Program p = new Program()
    • 好吧,他没有那个;当你运行一个控制台应用程序时,你正在实例化一个程序类——否则什么都不会发生。如果你是正确的,他应该说一些类似“实例化附加程序类”的东西。
    • @Michael:实际上,默认情况下您不会实例化任何类。运行时调用Program 类的static void Main(string[]) 方法。而且,这适用于控制台和窗口应用程序。
    • @Mike Caron:静态类仍在构造中,因此仍在实例化中。
    • @Matt Ellen:一个类的静态成员已初始化,但除非您调用new,否则它不会以任何方式构造(即实例化)。
    【解决方案3】:

    如果你不需要好的用户界面,但你仍然需要展示一些东西。

    我编写了可以静默执行的 Win forms 应用程序...即不显示表单、执行然后结束。

    一个很好的理由可能是确保应用程序可以在没有 GUI 的情况下运行。在许多 linux 服务器和 Windows Core 上安装 GUI 应用程序不是一个选项。

    【讨论】:

    • 你需要仔细阅读他的问题。他在问你为什么要做Program p = new Program()
    猜你喜欢
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2012-06-03
    相关资源
    最近更新 更多