C# 可以在类自己的入口点内实例化类吗?

C# 可以在类自己的入口点内实例化类吗?,c#,C#,考虑以下代码: class Program { static void Main(string[] args) { new Program().Run(args); } void Run(string[] args) { ... } ... } 现在,这就像我期望的那样工作,当然我看不出任何明显的错误,但本能地这段代码让我担心。所以我有三个问题: 编译器是否定义了这种行为 这段代码是否符合我的预期

考虑以下代码:

class Program 
{

    static void Main(string[] args)
    {
        new Program().Run(args);
    }

    void Run(string[] args)
    {
        ...
    }

    ...
}
现在,这就像我期望的那样工作,当然我看不出任何明显的错误,但本能地这段代码让我担心。所以我有三个问题:

  • 编译器是否定义了这种行为
  • 这段代码是否符合我的预期
  • 此代码是否符合最佳实践

  • 是的,是的,是的。我不明白为什么它会困扰任何人


    Main()
    这样的入口点与构造函数不同,而且是静态的。当它运行时,类是完全定义的,所有静态成员都可用,并且可以毫无问题地创建实例。

    是的,这是有效的代码,并且执行您希望它执行的操作


    Main只是一个静态方法。它是入口点这一事实,只意味着CLR在启动时调用它。在静态方法中实例化一个类并对其调用方法是完全有效的。

    您所做的绝对没有错。静态方法始终创建周围类的实例(例如,请参见singleton模式)。是的,这只是另一种方法。它唯一的特殊之处在于它在启动时被调用一次。稍后再次调用该方法没有什么坏处,因为它与其他静态方法没有任何不同,所以不用担心。