实例化包含static void Main()的类

ano*_*ous 6 c# static program-entry-point instance console-application

我正在审查一个同事的C#控制台应用程序,我看到这个片段:

class Program
{
    static void Main(string[] args)
    {
        Program p = new Program();
        p.RealMain();
    }

    ... non-static RealMain function
}
Run Code Online (Sandbox Code Playgroud)

据推测,他这样做是因为他想拥有实例级别的字段等.

我以前没见过这个,但这种风格让我感到困惑.这是一种常见且被接受的做法吗?

Kei*_*thS 6

有一种思想流派认为面向对象代码的main()函数应该尽可能少.Main()是程序代码设计的"丑陋"回归,其中程序是在一个函数中编写的,只在必要时调用子例程.在OOP中,所有代码都应该封装在告诉他们工作的对象中.

因此,通过这样做,可以将main()入口点中的LOC减少到两行,并且程序的真实逻辑以更OO的方式构造和执行.


Jon*_*eet 6

对于我,这说得通.

特别是,你可能需要添加刚刚足够的逻辑为Main解析命令行参数-可能使用广义的说法分析器-然后通过这些选项到构造适合于有问题的程序一个强类型的方式.

阿尔宾问为什么这是必要的.总之一句话:可测试性.在某些情况下,至少使用单元测试或可能的集成测试来测试顶级程序的某些方面是完全可行的.使用实例字段而不是静态字段(等)可以提高可测试性,因为您不必担心以前的测试运行会搞乱状态.