为什么你可以用C#做到这一点?
class Test
{
static void Main()
{
Test test = new Test();
}
}
答案 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());
这样的东西。