【问题标题】:Need help regarding very basic issue about .Net program execution flow and basic oops related [closed]需要有关.Net程序执行流程和基本oops相关的非常基本问题的帮助[关闭]
【发布时间】:2012-05-06 04:51:09
【问题描述】:

怀疑.net程序执行流程

几年来,我一直从事开发工作,但我对 C# win 或 Web 应用程序的运行方式缺乏了解。当我们从 IDE 运行应用程序时,编译器如何进入场景以编译我们的程序,然后程序如何启动...... CLR 如何进入场景以及 JIT 如何进入场景。谁控制程序的入口点。谁从外部调用程序入口点,即所谓的静态 void Main()。 CLR 如何参与执行程序以及谁参与 CLR。 JIT 如何参与以及谁参与了 JIT。为什么入口点是 static void main() ?

很多书帮助我们用 C# 编写代码,但从不谈论程序执行流程.......net 程序是如何运行的。当我们单击任何 .net exe 时,exe 是如何运行的。所以我有一些疑问....如果可能的话,请详细讨论上述问题或将我指向正确的文章。

怀疑 OOPS

1) 我看到一个类是私有的,但构造函数是公共的......为什么......这是什么意思。有没有什么特殊的目的是为什么要这样设计类。

2) 我看到了公共类,但它有三个构造函数,一个是私有的,一个是静态的,最后一个是公共的……这样设计一个类有什么特殊目的吗?

3) 静态类总是有静态构造函数?

4) 如果一个公共类有普通的构造函数和静态构造函数,那么目的是什么。

如果可能,请详细讨论上述 OOPS 问题........谢谢

【问题讨论】:

  • 一个可以回答的问题,不要开始讨论SO。
  • 正如@TimSchmelter 所说,请不要在一个问题中问多个问题。
  • 我作为开发人员工作了一年......所以我可以问非常基本的问题。那么基本问题有什么问题。为什么我得到了巨大的负面标记......如果人们不喜欢我的问题,那么他们可以抛开......不是。
  • @KeithCosta:因为您在同一个 SO 问题中提出了 几个问题,所以您被否决了。您需要针对每个 SO 问题提出 一个 问题。
  • @KeithCosta:它没有关闭,因为这个问题太基础了,而是因为你一次要问多个问题。即使您将其拆分为多个,也无法(正确)回答,因为它具有主观性、争论性且过于宽泛。查看常见问题解答,可以在 SO 上提出什么问题:stackoverflow.com/faq“您的问题应该有合理的范围。如果您可以想象一本书可以回答您的问题,那么您的要求就太多了。”

标签: c# .net oop


【解决方案1】:

当我们从 IDE 运行应用程序时,编译器如何进入场景来编译我们的程序

IDE 启动编译器并将其传递给您的程序。编译器是另一个程序。它不需要特殊调用。您可以在没有 IDE 的情况下自己完成,只需直接调用 csc.exe

然后程序如何启动......CLR如何进入场景以及JIT如何进入场景。谁控制程序的入口点。谁从外部调用程序入口点,即所谓的静态 void Main()。 CLR 如何参与执行程序以及谁参与 CLR。 JIT 如何参与以及谁参与了 JIT。

JIT 是动态的 IL-to-native 编译器。它是将 .NET 语言编译成的 IL 进行翻译,以便程序可以实际运行。

就您使用 JIT 的方式而言,CLR 几乎是另一个世界。在这里我不打算详细介绍,但是您可以在 MSDN 上找到更多信息。

为什么入口点是 static void main() ?

公约。为什么语言叫C#?

我看到一个类是私有的,但构造函数是公共的......为什么......这是什么意思。有没有什么特殊的目的是为什么要这样设计类。

这样可以从外部类实例化私有类。例如:

public class A {
    private something = new B();

    private class B {
        public B() {
            // ...
        }
    }
}

如果构造函数不是public,则private 类无法被外部类实例化。

我看到了公共类,但它有三个构造函数,一个是私有的,一个是静态的,最后一个是公共的……这样设计一个类有什么特殊目的吗?

当然。他们都做不同的事情。这并不罕见。

静态类总是有静态构造函数?

没有。静态构造函数实际上非常少见。当然,静态类不能有普通的构造函数。

如果一个公共类有普通的构造函数和静态构造函数,那么目的是什么。

调用普通的构造函数来初始化一个对象。第一次使用该类时调用静态构造函数。仅仅因为一个类同时具有这两者并不能使它特别,您可以将该功能用于几乎任何事情。

【讨论】:

  • 当我们从 IDE 运行我们的程序或只是双击应用程序 exe 文件时,我不知道 .net 应用程序是如何执行的。很多学者在那里,他们可以很容易地消除我的困惑。请帮忙......谢谢
  • 感谢您的回答,但您在编译后并没有说 JIT 是如何进入现场的。谁将调用 JIT 将 IL 转换为本机代码。 exe 或程序集文件将如何运行。涉及 CLR 执行或运行 exe 或程序集的人员。寻找你的答案....谢谢
  • @KeithCosta:EXE 本身调用 CLR。这就是 .NET EXE 开头的内容 - 告诉 CLR 运行程序其余部分的代码。
猜你喜欢
  • 1970-01-01
  • 2012-07-27
  • 2013-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多