C# 语言规范_版本5.0 (第3章 基本概念)

论坛 期权论坛     
选择匿名的用户   2021-5-22 14:51   154   0
<div class="blogpost-body" id="cnblogs_post_body">
<div class="Section1">
  <h1>1. 基本概念</h1>
  <h2>1.1 应用程序启动</h2>
  <p>具有入口点 (entry point) 的程序集称为应用程序 (application)。应用程序运行时,将创建新的应用程序域 (application domain)。同一台计算机上可能会同时运行着同一个应用程序的若干个实例,此时,每一个实例都拥有各自的应用程序域。</p>
  <p>应用程序域用作应用程序状态的容器,以此隔离应用程序。应用程序域作为应用程序中和它使用的类库中所定义的类型的容器和边界。同一个类型若被加载到不同的应用程序域中就成为各自独立的客体,由它们在各自应用程序域中产生的实例亦不可直接共享。例如,对于这些类型的静态变量,每个应用程序域都有自己的副本,并且这些类型的静态构造函数在每个应用程序域中也要(最多)运行一次。关于如何处理程序域的创建和销毁,各实现可以按具体情况确定自己的策略或机制。</p>
  <p>当执行环境调用指定的方法(称为应用程序的入口点)时发生应用程序启动 (application startup)。此入口点方法总是被命名为 Main,可以具有下列签名之一:</p>
  <p class="Code">static void Main() {...}</p>
  <p class="Code">static void Main(string[] args) {...}</p>
  <p class="Code">static int Main() {...}</p>
  <p class="Code">static int Main(string[] args) {...}</p>
  <p>如上所示,入口点可以选择返回一个 int 值。此返回值用于应用程序终止(第 3.2 节)。</p>
  <p>入口点可以包含一个形参(可选)。该参数可以具有任意名称,但参数的类型必须为 string[]。如果存在形参,执行环境会创建并传递一个包含命令行实参的 string[] 实参,这些命令行实参是在启动应用程序时指定的。string[] 参数永远不能为 null,但如果没有指定命令行参数,它的长度可以为零。</p>
  <p>由于 C# 支持方法重载,因此类或结构可以包含某个方法的多个定义(前提是每个定义有不同的签名)。但在一个程序内,没有任何类或结构可以包含一个以上的名为 Main 的方法,因为 Main 的定义限定它只能被用作应用程序的入口点。允许使用 Main 的其他重载版本,前提是它们具有一个以上的参数,或者它们的唯一参数的类型不是 string[]。</p>
  <p>应用程序可由多个类或结构组成。在这些类或结构中,可能会有若干个拥有自己的 Main 方法,因为 Main 的定义限定它只能被用作应用程序的入口点。这样的情况下,必须利用某种外部机制(如命令行编译器的选项)来选择其中一个 Main 方法用作入口点。</p>
  <p>在 C# 中,每个方法都必须定义为类或结构的成员。通常,方法的已声明可访问性(第 3.5.1 节)由其声明中指定的访问修饰符(第 10.3.5 节)确定。同样,类型的已声明可访问性由其声明中指定的访问修饰符确定。为了能够调用给定类型的给定方法,类型和成员都必须是可访问的。然而,应用程序入口点是一种特殊情况。具体而言,执行环境可以访问应用程序的入口点,无论它本身的可访问性和封闭它的类型的可访问性是如何在声明语句中设置的。</p>
  <p>应用程序入口点方法不能位于泛型类声明中。</p>
  <p>在所有其他方面,入口点方法的行为与非入口点方法类似。</p>
  <h2>1.2 应用程序终止</h2>
  <p>应用程序终止 (application termination) 将控制返回给执行环境。</p>
  <p>如果应用程序的入口点 (entry point) 方法的返回类型为 int,则返回的值用作应用程序的终止状态代码 (termination status code)。此代码的用途是允许与执行环境进行关于应用程序运行状态(成功或失败)的通信。</p>
  <p>如果入口点方法的返回类型为 void,那么在到达终止该方法的右大括号 (}),或者执行不带表达式的 return 语句时,将产生终止状态代码 0。</p>
  <p>在应用程序终止之前,将调用其中还没有被垃圾回收的所有对象的析构函数,除非已将这类清理功能设置为取消使用(例如,通过调用库方法 GC.SuppressFinalize)。</p>
  <h2>1.3 声明</h2>
  <p>C# 程序中的声明定义程序的构成元素。C# 程序是用命名空间(第 9 章)组织起来的,一个命名空间可以包含类型声明和嵌套的命名空间声明。类型声明(第 9.6 节)用于定义类(第 10 章)、结构(第 10.14 节)、接口(第 13 章)、枚举(第 14 章)和委托(第 15章)。在一个类型声明中可以使用哪些类型作为其成员,
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP