C# 语言规范--1.12 命名空间和程序集

程序|规范|命名空间

  除了依赖于几个系统提供的类(如 System.Console),到目前为止介绍的程序都是独立存在的。但更常见的情况是:实际的应用程序由若干不同的部分组成,每个部分分别进行编译。例如,企业级应用程序可能依赖于若干不同的组件,其中包括某些内部开发的组件和某些从独立软件供应商处购买的组件。

  命名空间和程序集有助于开发基于组件的系统。命名空间提供一个逻辑组织体系。命名空间既用作程序的“内部”组织体系,也用作“外部”组织体系(一种表示向其他程序公开程序元素的途径)。

  程序集用于物理打包和部署。程序集可以包含类型、用于实现这些类型的可执行代码以及对其他程序集的引用。

  有两种主要的程序集:应用程序和库。应用程序有一个主入口点,通常具有 .exe 文件扩展名;而库没有主入口点,通常具有 .dll 文件扩展名。

  为了说明命名空间和程序集的使用,本节再次以前面介绍的“hello, world”程序为例,并将它分为两个部分:提供消息的类库和显示消息的控制台应用程序。

  这个类库仅含一个名为 HelloMessage 的类。示例

// HelloLibrary.cs
namespace Microsoft.CSharp.Introduction
{
   public class HelloMessage
   {
      public string Message {
         get {
            return "hello, world";
         }
      }
   }
}

  显示了名为 Microsoft.CSharp.Introduction 的命名空间中的 HelloMessage 类。HelloMessage 类提供一个名为 Message 的只读属性。命名空间可以嵌套,而声明

namespace Microsoft.CSharp.Introduction
{...}

  仅是若干层命名空间嵌套的简写形式。若不简化,则应该像下面这样声明:

namespace Microsoft
{
   namespace CSharp
   {
      namespace Introduction
      {...}
   }
}

  将“hello, world”组件化的下一个步骤是编写使用 HelloMessage 类的控制台应用程序。可以使用此类的完全限定名 Microsoft.CSharp.Introduction.HelloMessage,但该名称太长,使用起来不方便。一种更方便的方法是使用“using 命名空间指令”,这样,使用相应的命名空间中的所有类型时就不必加限定名称。示例

// HelloApp.cs
using Microsoft.CSharp.Introduction;
class HelloApp
{
   static void Main() {
      HelloMessage m = new HelloMessage();
      System.Console.WriteLine(m.Message);
   }
}

  显示了一个引用 Microsoft.CSharp.Introduction 命名空间的 using 命名空间指令。这样,HelloMessage 就成为 Microsoft.CSharp.Introduction.HelloMessage 的简写形式。

  C# 还允许定义和使用别名。using 别名指令定义类型的别名。当两个类库之间发生名称冲突时,或者当使用大得多的命名空间中的少数类型时,这类别名很有用。示例

  using MessageSource = Microsoft.CSharp.Introduction.HelloMessage;

  显示了一个 using 别名指令,该指令将 MessageSource 定义为 HelloMessage 类的别名。

  我们已编写的代码可以编译为包含类 HelloMessage 的类库和包含类 HelloApp 的应用程序。此编译步骤的细节可能因使用的编译器或工具而异。使用 Visual Studio .NET 中提供的命令行编译器时,用如下所列的命令:

  csc /target:library HelloLibrary.cs
  csc /reference:HelloLibrary.dll HelloApp.cs

  它产生一个名为 HelloLibrary.dll 的类库和一个名为 HelloApp.exe 的应用程序。

时间: 2025-01-20 13:28:14

C# 语言规范--1.12 命名空间和程序集的相关文章

《Groovy语言规范》-语法

原文链接  译者:王山山 语法 本章节涵盖了Groovy编程语言的语法.Groovy语言的语法源自Java语法,为Groovy增强了特定构造,允许一定程度上的简化语法. 1.注释 1.1.单行注释 单行注释以//开始,在一行中任何位置都可以被发现.//后面的字符,直到一行的末尾都是注释的一部分. // a standalone single line comment println "hello" // a comment till the end of the line 1.2.多行

分清“语言/规范”以及“平台/实现”,以及跨平台.NET开发

在许多年前,"语言"就等同于"平台",例如C,C++以及最早的Ruby和Python等等.但是随着技术发展,出现了一些通用的平台,例如.NET和Java,逐渐这些平台上的语言也越来越多.再后来,某些语言在不同平台上的实现也越来越多,事情也变得有些复杂.技术在发展,但是从目前社区的讨论中,我发现许多朋友的观念还没有跟上.简单地说,如今的观念,一定要从"语言即平台"切换成"语言及平台",当分清"语言"和&quo

《Groovy语言规范》-语法(一)

语法 本章节涵盖了Groovy编程语言的语法.Groovy语言的语法源自Java语法,为Groovy增强了特定构造,允许一定程度上的简化语法. 1.注释 1.1.单行注释 单行注释以//开始,在一行中任何位置都可以被发现.//后面的字符,直到一行的末尾都是注释的一部分. // a standalone single line comment println "hello" // a comment till the end of the line 1.2.多行注释 一个多行注释以/*开

JAVA语言规范-线程和锁章节之同步、等待和通知

原文链接  本文是Oracle官方<Java语言规范>的译文 JAVA语言规范:线程和锁 1 同步 JAVA编程语言提供了线程间通信的多种机制.这些方法中最基本的是同步化,此方法是使用监视器实现的.JAVA中每个对象与一个监视器相关联,一个线程可以加锁和解锁监视器.一次仅有一个线程可能在监视器上持有锁.尝试锁住该监视器的任何其他线程被阻塞,直到它们可以再该监视器上获得一个锁.线程t可以多次锁住特别的监视器:每个解锁将一个加锁操作的作用反转来了. synchronized语句计算了一个对象的引用

c# 命名空间和程序集_C#教程

使用类的全权名: System.Text.StringBuilder sb = new System.Text.StringBuilder(); 上面的写法很繁琐,使用using语句引入命名空间: using System.Text; StringBuilder sb = new StringBuilder(); 对于编译器来说,命名空间就是为一个类型附加一些分隔符号,使名称更有唯一性. c#的using指令是可选的,完全可以用类型的完整名称代替,c# 的using指令时指示编译器为 每一个类型

JAVA语言规范:线程和锁

JAVA语言规范:线程和锁 概述: 前面章节的大多数讨论,都是关于通过单线程一次执行单个语句或者表达式.而JAVA虚拟机可以支持多线程同时执行.这些线程可以独立执行代码操作,而操作后所产生的值会保留在共享内存当中.单处理器和多处理器都能支持多线程,它们都是通过分配CPU时间片来执行代码. 线程由Thread类表示.用户创建线程的唯一方式是创建此类的一个对象:每个线程和这样的一个对象相关.当在相应的Thread对象上调用start()方法是,一个线程将启动. 线程的行为,特别是当不正确同步时,容易

Facebook 推出 PHP 语言规范草案

PHP是最广泛使用的脚本语言之一,被数以千万计的网站使用,但直到现在它才有一个正式的语言规范.Facebook工程师和PHP核心开发者 Sara Golemon在上月初举行的OSCON会议上宣布了制定正式规格的计划,现在规格的草案已经发布在Github上. Facebook网站主要是基于PHP语言,过去几年Facebook向PHP贡献了许多开源项目,如虚拟机HHVM,翻译器HPHPc. 传送门(GitHub):https://github.com/php/php-langspec/blob/ma

一起谈.NET技术,分清“语言/规范”以及“平台/实现”,以及跨平台.NET开发

在许多年前,"语言"就等同于"平台",例如C,C++以及最早的Ruby和Python等等.但是随着技术发展,出现了一些通用的平台,例如.NET和Java,逐渐这些平台上的语言也越来越多.再后来,某些语言在不同平台上的实现也越来越多,事情也变得有些复杂.技术在发展,但是从目前社区的讨论中,我发现许多朋友的观念还没有跟上.简单地说,如今的观念,一定要从"语言即平台"切换成"语言及平台",当分清"语言"和&quo

C# 语言规范--1.1 开始

规范 clothes经典性"hello, world"程序可以写为: using System; class Hello {    static void Main() {       Console.WriteLine("hello, world");    } } C# 程序的源代码通常存储在一个或多个以 .cs 为文件扩展名的文本文件(如 hello.cs)中.可以通过 Visual Studio .NET 所提供的命令行编译器,使用以下命令行指令来编译此程序