C# 7.0 核心技术指南 (12):C#语言基础 2.1

阅读数:7 2019 年 11 月 30 日 23:31

C# 7.0核心技术指南(12):C#语言基础 2.1

(第一个 C#程序)

内容简介
本书前三章将集中介绍 C#语言。首先介绍基本的语法、类型和变量。而后会介绍一些高级的特性,如不安全代码以及预处理指令。如果你是 C#语言的初学者,请循序渐进地阅读这些章节。
其余各章则涵盖了.NET Framework 的核心功能,包括 LINQ、XML、集合、并发、I/O 和网络、内存管理、反射、动态编程、特性、安全、应用程序域和原生互操作性等主题。第 6 章和第 7 章是后续主题的基础,除这两章之外,其余各章可以按照需要以任何顺序阅读。LINQ 相关的三个章节好按顺序阅读。其中的一些章节需要一些并发相关的知识,这些知识将在第 14 章中介绍。

以下程序计算 12 乘以 30,并将结果 360 打印到屏幕上。双斜线“//”表示其后的内容是注释:

复制代码
using System; // Importing namespace
class Test // Class declaration
{
static void Main() // Method declaration
{
int x = 12 * 30; // Statement 1
Console.WriteLine (x); // Statement 2
} // End of method
} // End of class

该程序的核心是以下两个语句:

复制代码
int x = 12 * 30;
Console.WriteLine (x);

在 C#中,语句按顺序执行,每个语句都以分号(或者代码块,详见本章后续内容)结尾。第一个语句计算表达式 12*30 的值,并把结果存储到一个局部变量 x 中,该变量是一个整数类型。第二个语句调用 Console 类的 WriteLine 方法,将变量 x 的值输出到屏幕上的文本窗口中。

方法(method)是由一系列语句(语句块)组成的行为。语句块由一对大括号,及其中的零个或者多个语句组成。示例中定义了一个名为 Main 的方法:

复制代码
static void Main()
{
...
}

编写高层函数来调用低层函数可令程序得到简化。可重构(refactor)该程序,使用一个可重用的方法来计算某个整数乘以 12 的结果:

复制代码
using System;
class Test
{
static void Main()
{
Console.WriteLine (FeetToInches (30)); // 360
Console.WriteLine (FeetToInches (100)); // 1200
}
static int FeetToInches (int feet)
{
int inches = feet * 12;
return inches;
}
}

方法可以通过参数来接受调用者输入的数据,并通过指定的返回类型向调用者返回输出数据。上述代码中定义了一个 FeetToInches 方法,该方法有一个用于输入英尺的参数和一个用于输出英寸的返回类型:

复制代码
static int FeetToInches (int feet ) {...}

示例中的字面量 30 和 100 是传递给 FeedToInches 方法的实际参数(argument)。而 Main 方法后的括号中是空的,因而没有任何参数。其返回类型是 void 说明它不向调用者返回任何值:

复制代码
static void Main()

C#将 Main 方法作为程序执行的默认入口点。Main 方法也可以返回整数值(而非 void)从而将其返回给程序的执行环境(非 0 返回值往往代表一个错误)。Main 方法还可以接受一个字符串数组作为参数(数组中包含了传递给可执行程序的任何实际参数)。例如:

复制代码
static int Main (string[] args) {...}

数组(例如 string[])是固定数量的某种特定类型元素的集合。数组由元素类型和它后面的方括号指定。相关内容将在 2.7 节介绍。

方法是 C#中的诸多种类的函数之一。另一种函数是我们用来执行乘法运算的 * 运算符。其他的函数种类还包括构造器、属性、事件、索引器和终结器。

本例将两个方法组合到一个类中。类由函数成员和数据成员组成,并形成面向对象的构件块。Console 类将处理命令行输入 / 输出功能的成员,例如 WriteLine 方法,聚集在一起。Test 类则由 Main 方法和 FeetToInches 两个方法组成。类是类型之一,我们将在 2.3 节中介绍它。

程序的最外层将类型组织到了命名空间中。为了使 System 命名空间在应用程序中生效,并能够使用 Console 类,需要使用 using 指令。应将所有的类定义在 TestPrograms 命名空间中,例如:

复制代码
using System;
namespace TestPrograms
{
class Test {...}
class Test2 {...}
}

.NET Framework 由若干嵌套的命名空间组织而成。例如,以下命名空间中包含处理文本的类型:

复制代码
using System.Text;

使用 using 指令仅仅是为了方便;也可以使用命名空间加类型名称(例如 System.Text.StringBuilder)这种完整限定名称来引用类型。

编译

C#编译器将一系列.cs 扩展名的源代码文件编译成程序集。程序集是.NET 中的最小打包和部署单元。程序集可以是一个应用程序或者是一个库。普通的控制台程序或 Windows 应用程序是一个.exe 文件,包含一个 Main 方法。而库是一个.dll 文件,即一个没有入口点的.exe 文件。库可以被应用程序或其他的库调用(引用)。.NET Framework 就是由一系列库组成的。

C#编译器是 csc.exe。我们既可以使用像 Visual Studio 这样的 IDE 来编译程序,也可以在命令行中手动调用 csc 命令编译 C#程序(编译器本身通过库调用,详情参见第 27 章)。如需手动编译 C#程序,首先将程序保存成文件(例如 MyFirstProgram.cs),然后进入命令行并调用 csc 命令(csc 位于 %ProgramFiles(X86)%\msbuild\14.0\bin)1,如下所示:

1 对于.NET Core 而言,csc 的默认位置随平台的不同而不同。例如在 macOS 下,其默认位置位于 /usr/local/share/dotnet/sdk/{version}/Roslyn/bincore 下。

复制代码
csc MyFirstProgram.cs

这个命令将生成名为 MyFirstProgram.exe 的应用程序。

奇怪的是,.NET Framework 4.6 和 4.7 仍然包含 C# 5 的编译器。若要使用 C# 7 命令行编译器,必须安装 Visual Studio 2017 或 MSBuild 15。

如需生成库(.dll),请使用如下命令:

复制代码
csc /target:library MyFirstProgram.cs

我们将在第 18 章详细介绍程序集。

C# 7.0核心技术指南(12):C#语言基础 2.1

购书地址 https://item.jd.com/12681788.html?dist=jd

评论

发布