为什么你可以在类的main方法中创建类自我实例

时间:2010-03-30 08:27:15

标签: c#

为什么你可以用C#做​​到这一点?

class Test
{
    static void Main()
    {
        Test test = new Test();            
    }
}

6 个答案:

答案 0 :(得分:3)

你可以创建任何非抽象,非静态类的新实例,包括你自己编写代码的地方......

Test不是静态类,即使它没有任何非静态方法。如果没有定义任何构造函数,它总是会得到一个默认构造函数。所以你可以打电话给它。

class Foo
{
}

static class Bar
{
   static void Baz()
   {
     // you can create an instance of class Foo
     Foo f = new Foo();
   }
}

答案 1 :(得分:2)

你为什么不能这样做? Main()是一种静态方法。 (编辑:无论如何,您几乎可以在任何地方创建非抽象,非静态类的新实例。请参阅Stefan Steinegger的评论和回答。)

答案 2 :(得分:1)

你可以这样做,因为Main是静态的。它运行时没有任何实例。因此,在代码的其他地方,您可以直接调用Test.Main,而无需创建它的实例。

答案 3 :(得分:0)

为什么不呢?我刚尝试了它,它的工作原理

答案 4 :(得分:0)

此行为的实际应用是Singleton Pattern。既然你知道它 - 不要使用它;)

答案 5 :(得分:0)

你为什么要这样做?

精心设计的面向对象程序是对象和子对象的图形。但是,程序的入口点通常非常程序化。创建根对象的实例(然后创建子对象等)是引导对象图的好方法。

这就是为什么你在静态主方法中看到像Application.Run(new MyClass());这样的东西。