【问题标题】:Why is a program main method static?为什么程序主方法是静态的?
【发布时间】:2015-10-23 23:47:57
【问题描述】:

我一直认为(假设)Main 方法是静态的,因为您不能拥有它的多个实例(如果错了,请纠正我)。 Main 方法是程序的起点,因此您只能拥有一个。

如果我有

class Program
{

   static void Main(String[] args)
   { // something
   }

}

class OtherClass
{

   void Test()
   { 
      Program p1 = new Program();
      Program p2 = new Program();
      Program p3 = new Program();
      Program p4 = new Program();

   }

}

Program 的所有实例都将共享相同的Main 方法,因此总会有一个起点。

我说的对吗?因为我只是出于好奇搜索了这个问题,并在互联网上找到了不同的答案。

对于静态的主要方法,这种解释是否也正确?

【问题讨论】:

  • 这是什么语言?
  • 我不知道这很重要。每种语言的主要方法的概念都是相同的。但是c#
  • 当方法为static时,只能调用类中的方法而不实例化它。但是你的例子有点奇怪
  • 您介意在网络上链接这些不同的答案吗?
  • " 每种语言的 main 方法的概念都是相同的"。没有。

标签: c# static main-method


【解决方案1】:

如果入口点方法不是static,则需要先创建一个对象。那么问题来了:创建哪个类的对象?

我一直认为(假设)Main 方法是静态的,因为您不能拥有它的多个实例

你不能有方法的实例。方法驻留在 DLL 的 Code 部分中,不会复制到堆中。同一方法中只能有多个线程运行。

Main 方法是程序的起点,因此您只能有一个。

和以前一样:如果我们考虑签名,只有一种方法,不管它是否是静态的,都是独立的,因为它们没有被实例化。

Program 的所有实例都将共享相同的 Main 方法 ...

取决于您对“共享”一词的理解。所有对象都会有方法,是的。

...所以总会有一个起点。

其背后的推理是错误的。您有很多 Program 实例,但这与方法的数量无关。

【讨论】:

  • 如果 CLR 可以找到包含 main 方法的类,它肯定可以实例化该类。私有构造函数似乎是一个更大的问题。更不用说,对象是可重用的,CLR在调用main之后对对象没有进一步的用处,所以函数式的方法看起来更合乎逻辑
  • @VinceEmigh:它如何找到主要方法?基于哪个标准?
  • 基于与查找静态 main 方法相同的标准,但要求它是静态方法除外。但是,在相应的类没有无参数构造函数的情况下,我看到了一个更大的问题。正如@VinceEmigh 所建议的那样,在不知道要传递什么参数的情况下,CLR 可能“最肯定地实例化该类”。
  • same way it currently locates the main method。当然,CLR 将能够找到 main 方法。它必须调用它。 @O.R.Mapper 这是另一个很好的理由,缺少适当的构造函数参数。 CLR 不知道要传递给它什么。但是静态方法仍然存在这些问题。我很确定这是由于 CLR 不需要重用该对象,因此造成浪费
猜你喜欢
  • 2014-11-02
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
  • 2010-09-28
  • 1970-01-01
  • 2012-10-12
  • 2014-01-03
  • 1970-01-01
相关资源
最近更新 更多