指定Main方法所处的位置 编译过程中不显示编译信息 编译源文件但不输出 不导入标准库( mscorlib.d (续表) 项 /nowarn 编译过程中不生成警告信息 指定编译时是否进行优化 指定输出文件 搜索子目录以寻找源文件 /reference 从包含装配的文件中导入元数据 resource 把NET资源内嵌到输出文件 指定输出文件的格式 输出文件为exe可执行文件 输出文件为链接库 输出文件为模块 输出文件为 winexe可执行文件 unsafe 允许编译使用了不安全关键字的代码 /warn 设置警告级别 /warmaserror 把警告信息作为错误看待 win 32icon 把ico图标文件插入到输出文件 /win32res 把Win32资源插入到输出文件 34添加注释 应用程序并不是只要你自己一个人能看懂就够了。不管以前计算机老师或者是编 程书籍是否己经告诫过,这里我还要再一次强调:养成良好的代码注释的习惯。这是 名优秀的程序员必备的条件之一。代码注释不会浪费您的编程时间,它只会提高您 的编程效率,使您的程序更加清晰、完整、友好。 C#注释的方式和C++没有区别,每一行中双斜杠“//”后面的内容,以及在 分割符“/★”和“★/”之间的内容都将被编译器忽略。 这样,我们就可以采用“//”进行单行注释,采用分割符“/六”和“/” 进行多行注释。让我们对 Welcome程序加上注释 程序清单3-5 //源文件: welcome.cs /*说明:这里是我的第一个 C#程序/
/main 指定 Main 方法所处的位置 /nologo 编译过程中不显示编译信息 /nooutput 编译源文件但不输出 /nostdlib 不导入标准库 (mscorlib.dll). 续表 选项 作用 /nowarn 编译过程中不生成警告信息 /optimize 指定编译时是否进行优化 /out 指定输出文件 /recurse 搜索子目录以寻找源文件 /reference 从包含装配的文件中导入元数据 /resource 把 NET 资源内嵌到输出文件 /target 指定输出文件的格式 /target:exe 输出文件为 exe 可执行文件 /target:library 输出文件为链接库 /target:module 输出文件为模块 /target:winexe 输出文件为 winexe 可执行文件 /unsafe 允许编译使用了不安全关键字的代码 /warn 设置警告级别 /warnaserror 把警告信息作为错误看待 /win32icon 把 .ico 图标文件插入到输出文件 /win32res 把 Win32 资源插入到输出文件 .4 添 加 注 释 应用程序并不是只要你自己一个人能看懂就够了 不管以前计算机老师或者是编 程书籍是否已经告诫过 这里我还要再一次强调 养成良好的代码注释的习惯 这是 一名优秀的程序员必备的条件之一 代码注释不会浪费您的编程时间 它只会提高您 的编程效率 使您的程序更加清晰 完整 友好 注释的方式和 ++没有区别 每一行中双斜杠 后面的内容 以及在 分割符 和 之间的内容都将被编译器忽略 这样 我们就可以采用 进行单行注释 采用分割符 和 进行多行注释 让我们对 Welcome 程序加上注释 程序清单 3-5 源文件 welcome.cs / 说明 这里是我的第一个 程序
static void Maino i Console. WriteLine("Please enter your name: ) //要求用户输入姓名 Console. Readlineo,//读取用户输入 /*本行代码用于打印欢迎信息 您可以在这里添加自己的代码 程序在这里结束*/ 上面的注释似乎有些小题大做,但它毕竟说明了C#中注释的使用方法。 下面是对C#程序进行注释时要注意的两个问题 首先,避免在“//”之后的单行注解中使用反斜杠符号“\”。因为反斜杠符号“\” 在C#中是一个续行符,这样做往往会导致你所不希望的结果出现。例如,当你写了 类似于下面的代码 Console. WriteLine(" The result is:10}”,∥ 50) 在编译这段代码时,“//”表示逻辑上同一行剩余的所有文字被作为注释看待, 而续行符“\”则将这一行同下一行连接起来,那么第二行也被作为注释的一部分。这 时编译器找不到与第一行的左括号“(”相匹配的右括号“)”,因此编译出错。 其次,分割符“/*”和“/”之间的注释不能有嵌套注释。这是因为,C 编译器从遇到第一个分割符“/*”开始,将忽略下一个“/★”,直到遇上下一个与 之匹配的分割符“*/”才认为注释结束,这样编译器就会对多余的“火/”报告错 误,认为没有“/”与之相匹配。 些程序员经常习惯于把程序中不需要或暂时不需要的代码片段首尾分别加上分 割符“/”和“/”。这时,如果这些代码片段本身又含有注释的话,我们所讨论 的这种错误就会发生。这时,我们建议您换一种方式,把预处理语句#if# endif等贯穿 在程序中使用,因为它们可以强制编译器忽略已包含注释的源代码片段,从而通过这 种方式来实现源代码的嵌套注释 以上提到的在注释中可能发生的两种问题,如果编译器报告错误,那已经是很幸 运的了。如果是原本错误的程序被误认为是正确的加以编译,或者程序代码的原意因
using System; class Welcome { static void Main() { Console.WriteLine("Please enter your name:"); 要求用户输入姓名 Console.ReadLine(); 读取用户输入 Console.WriteLine("Welcome to you!"); 本行代码用于打印欢迎信息 您可以在这里添加自己的代码 程序在这里结束 } } 上面的注释似乎有些小题大做 但它毕竟说明了 中注释的使用方法 下面是对 程序进行注释时要注意的两个问题 首先 避免在 之后的单行注解中使用反斜杠符号 \ 因为反斜杠符号 \ 在 中是一个续行符 这样做往往会导致你所不希望的结果出现 例如 当你写了 类似于下面的代码 Console.WriteLine(“The result is:{0}” , // \ 150 ); 在编译这段代码时 表示逻辑上同一行剩余的所有文字被作为注释看待 而续行符 \ 则将这一行同下一行连接起来 那么第二行也被作为注释的一部分 这 时编译器找不到与第一行的左括号 相匹配的右括号 因此编译出错 其次 分割符 和 之间的注释不能有嵌套注释 这是因为 编译器从遇到第一个分割符 开始 将忽略下一个 直到遇上下一个与 之匹配的分割符 才认为注释结束 这样编译器就会对多余的 报告错 误 认为没有 与之相匹配 一些程序员经常习惯于把程序中不需要或暂时不需要的代码片段首尾分别加上分 割符 和 这时 如果这些代码片段本身又含有注释的话 我们所讨论 的这种错误就会发生 这时 我们建议您换一种方式 把预处理语句 if #endif 等贯穿 在程序中使用 因为它们可以强制编译器忽略已包含注释的源代码片段 从而通过这 种方式来实现源代码的嵌套注释 以上提到的在注释中可能发生的两种问题 如果编译器报告错误 那已经是很幸 运的了 如果是原本错误的程序被误认为是正确的加以编译 或者程序代码的原意因
此被曲解,造成的错误往往很难发现,那时造成的后果将会严重得多。 3.5小结 在本章中我们写了第一个C#程序“ Welcome”通过对该程序的分析和理解,我们 学习到了 如何在应用程序中与用户进行交互。 如何通过 System预定义的类 Console提供的方法来进行输入输出和对字符串 进行格式化 如何编译C#源文件 如何向代码中添加注释 复习题 (1)C#程序通常都是如何开始执行的 (2) Console类为我们提供了那些输入输出的手段? (3)说明如何使用编译器生成不同类型的输出文件。 (4)对源代码进行注释是必须的吗?为什么? (5)说说在C#代码中添加注释要注意那些问题
此被曲解 造成的错误往往很难发现 那时造成的后果将会严重得多 3.5 小 结 在本章中我们写了第一个 C#程序 Welcome 通过对该程序的分析和理解 我们 学习到了 z 如何在应用程序中与用户进行交互 z 如何通过 System 预定义的类 Console 提供的方法来进行输入输出和对字符串 进行格式化 z 如何编译 C#源文件 z 如何向代码中添加注释 复习题 1 C#程序通常都是如何开始执行的 2 Console 类为我们提供了那些输入输出的手段 3 说明如何使用编译器生成不同类型的输出文件 4 对源代码进行注释是必须的吗 为什么 5 说说在 C#代码中添加注释要注意那些问题
第二部分C#程序设计基础 第四章数据类型 应用程序总是需要处理数据,而现实世界中的数据类型多种多样,我们必须让计 算机了解需要处理什么样的数据,以及采用哪种方式进行处理,按什么格式保存数据 等等。比如,在编码程序中需要处理单个字符,在定购票系统需要打印货币金额,在 科学运算中不同情况下我们需要不同精度的小数,这些都是不同的数据类型。 其实,任何一个完整的程序都可以看成是一些数据和作用于这些数据上的操作的 说明。每一种高级语言都为开发人员提供一组数据类型,不同的语言提供的数据类型 不尽相同。 在本书第一部分,我们为读者简要地介绍了C#语言的主要特点和运行环境,并且 创建了第一个简单的C#应用程序。本章将会给你介绍C#的数据类型系统。在这一章 中,你将系统地学习C#语言为我们提供的数据类型,以及使用这些数据类型时的要点 对于程序中的每一个用于保存信息的量,使用时我们都必须声明它的数据类型 以便编译器为它分配内存空间。C#的数据类型可以分为两大部分:值类型和引用类型 如果你是一名编程新手,本章将是你继续学习C#的基础,应该牢牢掌握本章提到 的各种数据类型。而对于有一定C和C++经验的读者来说,对本章的内容不会感到困 难,但在阅读本章和紧接着的几章里,要把注意力集中到文章中C#独有的特点,尤其 是与C和C++的区别,这才是关键所在。 4.1值类型 在具体讲解各种类型之前,我们先提一下变量的概念,在下一章我们将对变量作 进一步的讨论。从用户角度来看,变量就是存储信息的基本单元;从系统角度来看 变量就是计算机内存中的一个存储空间。 下面我们开始介绍值类型。C#的值类型可以分为以下几种: 简单类型( Simple types) 结构类型( Struct types 枚举类型( Enumeration types) 简单类型,有时人们也称为纯量类型,是直接由一系列元素构成的数据类型。C#语
第二部分 C#程序设计基础 第四章 数 据 类 型 应用程序总是需要处理数据 而现实世界中的数据类型多种多样 我们必须让计 算机了解需要处理什么样的数据 以及采用哪种方式进行处理 按什么格式保存数据 等等 比如 在编码程序中需要处理单个字符 在定购票系统需要打印货币金额 在 科学运算中不同情况下我们需要不同精度的小数 这些都是不同的数据类型 其实 任何一个完整的程序都可以看成是一些数据和作用于这些数据上的操作的 说明 每一种高级语言都为开发人员提供一组数据类型 不同的语言提供的数据类型 不尽相同 在本书第一部分 我们为读者简要地介绍了 C#语言的主要特点和运行环境 并且 创建了第一个简单的 C#应用程序 本章将会给你介绍 C#的数据类型系统 在这一章 中 你将系统地学习 C#语言为我们提供的数据类型 以及使用这些数据类型时的要点 对于程序中的每一个用于保存信息的量 使用时我们都必须声明它的数据类型 以便编译器为它分配内存空间 C#的数据类型可以分为两大部分 值类型和引用类型 如果你是一名编程新手 本章将是你继续学习 C#的基础 应该牢牢掌握本章提到 的各种数据类型 而对于有一定 C 和 C++经验的读者来说 对本章的内容不会感到困 难 但在阅读本章和紧接着的几章里 要把注意力集中到文章中 C#独有的特点 尤其 是与 C 和 C++的区别 这才是关键所在 4.1 值 类 型 在具体讲解各种类型之前 我们先提一下变量的概念 在下一章我们将对变量作 进一步的讨论 从用户角度来看 变量就是存储信息的基本单元 从系统角度来看 变量就是计算机内存中的一个存储空间 下面我们开始介绍值类型 C#的值类型可以分为以下几种 z 简单类型 Simple types z 结构类型 Struct types z 枚举类型 Enumeration types 简单类型 有时人们也称为纯量类型 是直接由一系列元素构成的数据类型 C# 语
言中为我们提供了一组已经定义的简单类型。从计算机的表示角度来看,这些简单类 型可以分为整数类型、布尔类型、字符类型和实数类型。 4.1.1整数类型 顾名思义,整数类型的变量的值为整数。数学上的整数可以从负无穷大到正无穷 大,但是由于计算机的存储单元是有限的,所以计算机语言提供的整数类型的值总是 在一定的范围之内。C#中有九种整数类型:短字节型( sbyte)、字节型(byte)、短整 型( short)、无符号短整型( ushort)、整型(int)、无符号整型(uint、长整型(long)、 无符号长整型( ulong)。划分的依据是根据该类型的变量在内存中所占的位数。位数的 概念是按照2的指数幂来定义的,比如说8位整数,则它可以表示2的8次方个数值, 即256这和我们在 Windows系统中显示属性是一样的,比如16位真彩色,表示一共 可以显示2的16次方即65536种颜色 这些整数类型在数学上的表示以及在计算机中的取值范围如表4-1中所示 表4-1整数类型 数据类型 特征 巨围 取值范 有符号8位整数 在-128到127之间 无符号8位整数 在0到255之间 short 符号16位整数 在-32,768到32,767之间 ushort 无符号16位整数 在0到65,535之间 有符号32位整数 在-2,147,483,648到2,147483647之间 无符号32位整数 0到4,294,967,295之间 有符号64位整数 在9,223,372036,854,775,808和 9,223,372,036,854,775,807之间 无符号64位整数 0和18,446,74,073,709,551,615之间 程序清单4-1 public static void Main( i short x= 32766: X++
言中为我们提供了一组已经定义的简单类型 从计算机的表示角度来看 这些简单类 型可以分为整数类型 布尔类型 字符类型和实数类型 4.1.1 整数类型 顾名思义 整数类型的变量的值为整数 数学上的整数可以从负无穷大到正无穷 大 但是由于计算机的存储单元是有限的 所以计算机语言提供的整数类型的值总是 在一定的范围之内 C#中有九种整数类型 短字节型 sbyte 字节型 byte 短整 型 short 无符号短整型 ushort 整型 int 无符号整型 uint 长整型 long 无符号长整型 ulong 划分的依据是根据该类型的变量在内存中所占的位数 位数的 概念是按照 2 的指数幂来定义的 比如说 8 位整数 则它可以表示 2 的 8 次方个数值 即 256 这和我们在 Windows 系统中显示属性是一样的 比如 16 位真彩色 表示一共 可以显示 2 的 16 次方即 65536 种颜色 这些整数类型在数学上的表示以及在计算机中的取值范围如表 4-1 中所示 表 4-1 整数类型 数据类型 特征 取值范围 sbyte 有符号 8 位整数 在-128 到 127 之间 byte 无符号 8 位整数 在 0 到 255 之间 short 有符号 16 位整数 在-32,768 到 32,767 之间 ushort 无符号 16 位整数 在 0 到 65,535 之间 int 有符号 32 位整数 在-2,147,483,648 到 2,147,483,647 之间 uint 无符号 32 位整数 0 到 4,294,967,295 之间 long 有符号 64 位整数 在 9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之间 ulong 无符号 64 位整数 0 和 18,446,744,073,709,551,615 之间 程序清单 4-1 using System; class Test { public static void Main() { short x = 32766; x++; Console.WriteLine(x); x++; Console.WriteLine(x); }