![C#编程入门指南(上下册)](https://wfqqreader-1252317822.image.myqcloud.com/cover/398/31186398/b_31186398.jpg)
第2章 踏上C#开发的征程
本章概览
要学习C#编程,必然要熟悉C#程序的结构,而为了养成良好的编码习惯,在学习C#之初,熟悉常用的C#程序编写规范也是非常重要的。本章将详细介绍如何编写C#程序,以及C#程序的基本结构;另外,将对C#程序的常用编写规范进行介绍。
知识框架
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00062.jpg?sign=1739920075-TcCB2x6hIDGV7H9BHhguPm9GQaMLrY5L-0-b09170d95ab533d248223ef7375495f0)
2.1 编写第一个C#程序
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00063.jpg?sign=1739920075-rcV8T10AVbhOcdx2XqPA2sUnTz1NK991-0-00db01772d72f4aa677a196105828e5b)
在大多数编程学习过程中,编写的第一个程序通常都是输出“Hello World”。这里将使用Visual Studio 2017和C#来编写这个程序。首先介绍使用Visual Studio 2017开发C#程序的基本步骤,如图2.1所示。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00064.jpg?sign=1739920075-2hxHuZHQrejxRLu9SXe5swSxMK8PnMw0-0-a2c440d6bcf3c61abaadfe817f6278eb)
图2.1 使用Visual Studio 2017开发C#程序的基本步骤
通过图2.1中的3个步骤,开发人员可以很方便地创建并运行一个C#程序。例如,使用Visual Studio 2017在控制台中创建输出“Hello World”的程序并运行,具体开发步骤如下。
步骤1,在系统的开始菜单中依次选择“所有程序”→“Visual Studio 2017”,打开Visual Studio 2017。
说明:对于Windows 10操作系统,在开始菜单中单击“Visual Studio 2017”即可打开Visual Studio2017。
步骤2,依次选择Visual Studio 2017工具栏中的“文件”→“新建”→“项目”,打开“新建项目”对话框,如图2.2所示。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00065.jpg?sign=1739920075-DDIIzr2Zj4SEDeS1gXIeVyg9pxcQWHND-0-b348400bcc2565a1372f5b36b8c22973)
图2.2 “新建项目”对话框
说明:图2.2中的程序保存路径可以设置为计算机中的任意路径。
步骤3,按照如图2.2所示步骤创建一个控制台应用程序。
步骤4,控制台应用程序创建完成后,会自动打开Program.cs文件,在该文件的Main方法中输入如下代码。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00066.jpg?sign=1739920075-EFEUJ6UAsB1Nc1gdGgbkNuv2ZUguMRSs-0-598793924bfc7b6d6f7fbcdcdcc2f239)
代码注解
第1行代码是自动生成的Main方法,用来作为程序的主入口方法。每个C#程序都必须有一个Main方法。
第3行代码中的Console.WriteLine方法主要用来向控制台输出内容。
第4行代码中的Console.ReadLine方法主要用来获取控制台的输出内容,这里用来将控制台窗体定位到桌面上。
单击Visual Studio 2017工具栏中的图标按钮,运行该程序,效果如图2.3所示。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00069.jpg?sign=1739920075-1qlxJiU51Z0P7xrgh3LHW9nk2zfLFk0h-0-084e5c205bc0b342597c8f371cd0c4ff)
图2.3 输出“Hello World”
在上面的代码中,使用C#输出了“Hello World”,下面通过一个实例介绍如何在C#中输出中文内容。
示例1.输出“人因梦想而伟大”
创建一个控制台应用程序,使用Console.WriteLine方法输出“人因梦想而伟大”,完整代码如下。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00070.jpg?sign=1739920075-WzvbpbE45A1zWTfd9AJrC9S2TDhldMOq-0-fb6e3858f29e72e8a9121e5585cc7f58)
代码注解
第1行到第4行代码是自动生成的代码,用来引用默认的命名空间。
第6行代码是自动生成的命名空间,该命名空间的名称默认与创建的项目名称相同,开发人员可以手动修改。
第8行代码是自动生成的一个Program类,该类是C#程序的启动类,类的名称可以手动修改。
输出中文字符串代码的运行结果如图2.4所示。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00072.jpg?sign=1739920075-eRoX6V5y3RndpX0ZJ1LSK3WjNC79krGH-0-4352bcc86b4cbc82cbc41ee41bd9b262)
图2.4 输出中文字符串代码的运行结果
2.2 C#程序结构预览
上面讲解了如何创建第一个C#程序输出“Hello World”,完整的代码效果如图2.5所示。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00073.jpg?sign=1739920075-annG35jht99Qp7ihO3O126klL3iodfSz-0-28fed8c8261602790d2bb5463b103db3)
图2.5 输出“Hello World”的程序的完整代码效果
从图2.5中可以看出,一个C#程序总体可以分为命名空间、类、关键字、标识符、Main方法、C#语句和注释等。本节将分别对C#程序的各个组成部分进行讲解。
2.2.1 命名空间
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00074.jpg?sign=1739920075-YVkko21OCvkbP9c5j6lev3E5axoxyABy-0-bf0a2e17af3303ad4bd32e8688a8ae0a)
在使用Visual Studio创建项目时,会自动生成一个与项目名称相同的命名空间。例如,在创建输出“Hello_World”项目时,会自动生成一个名称为“Hello_World”的命名空间,如图2.6所示。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00075.jpg?sign=1739920075-mNv0QT10HROD8IW3IQF6X2YigT6nYlzz-0-61bc7cab6f6e250c76473a6322b95edf)
图2.6 自动生成的命名空间
命名空间在C#程序中起到组成程序的作用。在C#程序中定义命名空间时,需要使用namespace关键字,其语法如下。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00076.jpg?sign=1739920075-khottuLTtRbEHrfQWy0I9gcO3OhYB7Ng-0-22e22f80ad8bdcd1c06e9206de27ae6e)
说明:开发人员一般不用自定义命名空间,因为在创建项目或创建类文件时,Visual Studio会自动生成一个命名空间。
命名空间既作为程序的“内部”组织系统,也作为向“外部”公开(一种向其他程序公开自己拥有的程序元素的方法)的组织系统。如果要调用某个命名空间中的类或方法,首先需要使用using指令引入命名空间,这样,就可以直接使用该命名空间中所包含的成员(包括类及类中的属性、方法等)了。
using指令的基本形式如下。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00077.jpg?sign=1739920075-Z3gHAdx5T8W0oq78cxJlgEWgXAHjpyr8-0-519d3f8a07611ffcfe9379a9f53e2779)
说明:C#程序的命名空间就像一个包含不同类型物品的仓库,而using指令就好比一把钥匙,命名空间的名称就好比仓库的名称,用户可以通过钥匙打开指定名称的仓库,进而从仓库中获取所需要的物品,其示意图如图2.7所示。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00078.jpg?sign=1739920075-lfJHD7FgLjgBEeibbpZtYmoScZAbIZeU-0-0c25b2ff78e6b60f81ca4596009bfc7e)
图2.7 命名空间与仓库对比示意图
例如,下面的代码定义了一个Demo命名空间。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00079.jpg?sign=1739920075-SoRjyBLDbLYH8I3uv5kmTOVYJQcECPL7-0-e5f08e1f860306fce8cf06b98106caf2)
定义完命名空间后,如果要使用命名空间中所包含的类,需要使用using指令引用命名空间。例如,下面的代码使用using指令引用自定义的Demo命名空间。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00080.jpg?sign=1739920075-bWIUdPJFAUz9fqeJxnisP1FAPSZV1LG6-0-6939332628265b6b1d682b61162f713a)
常见错误
如果在使用指定命名空间中的类时,没有使用using指令引用命名空间,如下面的代码所示,则会出现如图2.8所示的错误提示信息。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00081.jpg?sign=1739920075-RUIO4DURbR3imRO6hQ1vPD9RohtODE0e-0-aa3e3b8fb80971ee1a4baa4154dd5276)
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00082.jpg?sign=1739920075-ZfZc8K530ngOyY4GfTLqBaiuS9jiBc7z-0-2dbd832c66611c1500db8f9ed8d8cda1)
图2.8 没有引用命名空间而使用其中的类时出现的错误
要修改以上代码,可以直接在命名空间区域使用using指令引用Demo命名空间,代码如下。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00083.jpg?sign=1739920075-YLU4RdExQfSWvN33qCrS9ngGoFGm2UvY-0-47bcd1d0033ea080ed5014cc835dd566)
多学两招
在使用命名空间中的类时,如果不想用using指令引用命名空间,可以在代码中使用命名空间调用其中的类。例如,下面的代码直接使用Demo命名空间调用其中的Operation类。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00084.jpg?sign=1739920075-vPOnxlB3CEc8N0HIG3poIxtyZ752Ww6j-0-3537262bb6d2648940e1f73a566fe4e2)
2.2.2 类
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00085.jpg?sign=1739920075-8XFl8c8AWLVHracB2qlZlgQ9sA2nFcAO-0-1edcd1f13295e94a67d074cd9a5c6bde)
C#程序的主要功能代码都是在类中实现的。类是一种数据结构,可以封装数据成员、方法成员和其他的类。因此,类是C#的核心和基本构成模块。C#支持自定义类,使用C#编程就是编写自己的类来描述实际需要解决的问题。
说明:如果把命名空间比作一个医院,类就相当于该医院的各个科室,如外科、妇科、内科、中医科等,各科室都有自己的工作方法,相当于在类中定义的变量、方法等。命名空间与类的关系示意图如图2.9所示。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00086.jpg?sign=1739920075-MsiBkYPBlNnHC0UGGUxM5i6i3mNnMhDE-0-6c0c3659079a1be27e14e1337ace05b2)
图2.9 命名空间与类的关系示意图
在使用类之前都必须先进行声明,一个类一旦被声明,就可以作为一种新的类型来使用。在C#中通过class关键字来声明类,声明语法如下。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00087.jpg?sign=1739920075-ISPHx4ahk1M78Wo12pxq4nkGlPC8UfXV-0-442515af5684e9318389b81aacf560c3)
说明:在声明类时,还可以指定类的修饰符和其要继承的基类或者接口等信息,在这里只要知道如何声明一个最基本的类即可。关于类的详细内容,会在第7章中进行专题讲解。
在上面的语法中命名类的名称时,最好能够体现类的含义或用途。类名一般采用第一个字母大写的名词,也可以采用多个词构成的组合词。
例如,声明一个汽车类Car(该类没有任何意义,只演示如何声明一个类),代码如下。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00088.jpg?sign=1739920075-iACO47v1Mnprzq5EdvJjwUuHPEPPbhO6-0-c835786355f3adf5276e922c4dc80a5a)
2.2.3 关键字与标识符
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00089.jpg?sign=1739920075-HoppYvGCL6NmrdadbvN6a4KqMVBWszYD-0-4b59cf0099230a17c52968b3972c933d)
1.关键字
关键字是C#中已经被赋予特定意义的一些单词,在开发程序时,不可以把这些关键字作为命名空间、类、方法或属性等来使用。在输出“Hello World”的程序中,using、namespace、class、static和void等都是关键字。C#中的常用关键字如表2.1所示。
表2.1 C#中的常用关键字
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00090.jpg?sign=1739920075-2tR9fPQ5N9OyjsAiPtFq0tfaQFCtxKb7-0-4973d9bef1efccfcbb5b7f269ffce094)
常见错误
如果在开发程序时,使用C#中的关键字作为命名空间、类、方法或属性等的名称,如下面的代码使用C#关键字void作为类的名称,则会出现如图2.10所示的错误提示信息。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00091.jpg?sign=1739920075-3QVtrA85GE3foLa65Ehnzz1Oh8EBv1E2-0-53644481257fd03453a11daf9b65cba5)
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00092.jpg?sign=1739920075-GPW7KlJP1alJBplqEs1an5dU2SLXzUid-0-05f778c21a7010b4d3e54ee7541a12e4)
图2.10 使用C#关键字作为类名时的错误提示信息
2.标识符
标识符可以简单地理解为一个名字,比如,每个人都有自己的名字。它主要用来标识类名、变量名、方法名、属性名、数组名等各种成员。
C#标识符命名规则如下。
·由任意顺序的字母、下画线(_)和数字组成。
·第一个字符不能是数字。
·不能是C#中的保留关键字。
下面是合法的标识符。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00093.jpg?sign=1739920075-7copjKOeAERvVawauK9MIklkUVznl7aE-0-2cacb4be38f66c1dd0d9e67fd62f1cc7)
下面是非法标识符。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00095.jpg?sign=1739920075-tUZGbdBteg38evAtC89Bl2aIHpnKTQSM-0-4243b0c0b27ce3f3cb5cb7e4ec645ff3)
注意:C#标识符不包含#、%或$等特殊字符。
在C#中,标识符中的字母是严格区分大小写的,两个同样的单词,如果大小写格式不一样,所代表的意义是完全不同的。例如,下面3个变量是完全独立、毫无关系的,就像3个长得比较像的人,都是独立的个体。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00096.jpg?sign=1739920075-NNPOmrQoCDlxKlAf2QqX7aYlhW84XJ6Y-0-95c245aa1df9219fc7e88e3a000716ab)
说明:在C#中允许使用汉字作为标识符,如“class 运算类”,在程序运行时不会出现错误,但建议读者尽量不要使用汉字作为标识符。
2.2.4 Main方法
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00097.jpg?sign=1739920075-6TgFZCU0F5iz1hOVKYUhXKAPWExGG7iJ-0-a4059c64eaae365c71447a95504b95f2)
在Visual Studio中创建控制台应用程序后,会自动生成一个Program.cs文件,该文件有一个默认的Main方法,代码如下。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00098.jpg?sign=1739920075-GbaegBhTk6h1MNaQbFSe5MzB3YghDSCT-0-a11e5c21a38bc601e9c7427f350f8ff9)
每个C#程序都必须包含一个Main方法,它是类体中的主方法,也称为主入口方法,可以说是激活整个程序的开关。Main方法从“{”开始,至“}”结束。static和void分别是Main方法的静态修饰符和返回值修饰符,C#程序中的Main方法必须声明为static,并且区分大小写。
常见错误
如果将Main方法前面的static关键字删除,则程序在运行时会出现如图2.11所示的错误提示信息。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00099.jpg?sign=1739920075-BYQ4oSEW2llhjGMwwk08UL8WARuaafw0-0-ed857480a8d49bb36f33db833c4a5d8e)
图2.11 删除static关键字后Main方法出现的错误提示信息
Main方法一般都是在创建项目时自动生成的,不用开发人员手动编写或修改。如果需要修改,则需要注意以下3个方面。
·Main方法在类或结构内声明,它必须是静态的,而且不应该是公用的。
·Main方法的返回类型有两种:void或int。
·Main方法可以包含命令行参数string[] args,也可以不包括。
根据以上3个注意方面,可以总结出,Main方法有以下4种声明方式。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00100.jpg?sign=1739920075-IfHtFAoRq0n9i952enV4AcRsZsTfWgbl-0-6a8823e09eb45b8577a23d04966431e4)
技巧:通常在Main方法中不写具体逻辑代码,只进行类实例化和方法调用(好比手机来电话了,只需要按“接通”键就可以通话,而不需要考虑手机通过怎样的信号转换将电磁信号转化成声音)。这样的代码简洁明了,容易维护。良好的编码习惯,可以让程序员的工作事半功倍。
2.2.5 C#语句
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00101.jpg?sign=1739920075-IRAimVpajqmh5TRf57B2nGisVCcakMLH-0-c8affa430e7c55ca4a8338d1d26985b0)
C#语句是构造所有C#程序的基本单位。使用C#语句可以声明变量和常量、调用方法、创建对象或执行任何逻辑操作。C#语句以分号终止。
例如,在输出“Hello World”的程序中输出“Hello World”字符串和定位控制台的代码就是C#语句。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00102.jpg?sign=1739920075-pU5mWjJv04TDAb36qqa60fbTOewEBrAl-0-fbae8b6ba70851b97d57751a778381e6)
上面的代码是两条最基本的C#语句,用来在控制台中输出内容和读取内容,它们都用到了Console类。Console类表示控制台应用程序的标准输入流、标准输出流和错误流,该类中包含很多方法,与输入、输出相关的主要有4个方法,如表2.2所示。
表2.2 Console类中与输入、输出相关的方法
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00103.jpg?sign=1739920075-I1JwC3nnW7BuO62gx0P7ASP44JH11Txn-0-b22434eae8537fadf5a638547e65b3a5)
Console.Read方法和Console.ReadLine方法用于从控制台读入,它们的使用区别如下。
·Console.Read方法:返回值为int类型,只能记录int类型的数据。
·Console.ReadLine方法:返回值为string类型,可以将控制台中输入的任何类型的数据存储为字符串类型的数据。
技巧:在开发控制台应用程序时,经常使用Console.Read方法或Console.ReadLine方法定位控制台窗体。
Console.Write方法和Console.WriteLine方法用来向控制台输出,它们的使用区别如下。
·Console.Write方法:输出后不换行。
例如,使用Console.Write方法输出“Hello World”字符串,代码如下,代码的运行效果如图2.12所示。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00104.jpg?sign=1739920075-XXDled2q67CRS2O9mD3Tk70r11jwPWLR-0-768ecc759cefd8b8ffb6c7daf79fbac9)
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00105.jpg?sign=1739920075-08uT8JwauzE5Dgq57Z3kTuagA3ISNH6J-0-cf22081ff9c63221bdeccf859050d006)
图2.12 使用Console.Write方法输出“Hello World”字符串代码的运行效果
·Console.WriteLine方法:输出后换行。
例如,使用Console.WriteLine方法输出“Hello World”字符串,代码如下,代码的运行效果如图2.13所示。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00106.jpg?sign=1739920075-AIxmg5PHyFyGKwWipzIPUcYHHBXh1Ge8-0-012e3b8db00a90508f0a9ee422c59b42)
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00107.jpg?sign=1739920075-alweUJcJOQCNPZWapqsXo7Qa41DfPUFy-0-a1b7bd98daa1cc047b4ef886519846b4)
图2.13 使用Console.WriteLine方法输出“Hello World”字符串代码的运行效果
注意:C#代码中所有的字母、数字、括号及标点符号均为英文输入法状态下的半角符号,而不能是中文输入法或英文输入法状态下的全角符号。例如,如图2.14所示为中文输入法的分号引起的错误。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00108.jpg?sign=1739920075-Pp1UEumPOelwABS8sYPrByIIb0mm40Ge-0-cb85f393213df85c31a7eb8d84f4e06a)
图2.14 中文输入法的分号引起的错误
2.2.6 注释
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00109.jpg?sign=1739920075-oOlXpE5239sExEzzDwn363zd650dAWPt-0-55fb814aacc1da2872a86a40ef73f085)
注释是在编译程序时不会执行的代码或文字,其主要功能是对某行或某段代码进行说明,以方便代码的理解与维护,或者在调试程序时,将某行或某段代码设置为无效代码。常用的注释主要有行注释和块注释两种,下面分别对其进行介绍。
说明:注释就像超市中各商品下面的价格标签,对商品的名称、价格、产地等信息进行说明,如图2.15所示。而在程序中,注释最基本的功能就是描述代码的作用。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00110.jpg?sign=1739920075-6PkX3gDWtrHOlpXhhXxesMC6uSXm6qYi-0-dd6cd2862848f7fcc10ec8325aef6b99)
图2.15 超市中各商品下面的价格标签相当于注释
1.行注释
在C#代码中,行注释都以“//”开头,后跟注释的内容。例如,在输出“Hello World”的程序中使用行注释,解释每一行代码的作用,代码如下。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00111.jpg?sign=1739920075-Ufv9wKnpBX1Fw8CadqBuYwSA4MbDgeAk-0-4fe1e9de8dc55b87dee4a02281ca96a2)
注意:注释可以出现在代码的任意位置,但是不能分隔关键字和标识符。例如,下面的代码注释是错误的。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00112.jpg?sign=1739920075-gzec0JeX4tAuFnNHUP6BSkWVYStbNoQH-0-ced962249f9d6a9e179f66c87bf20a2c)
2.块注释
如果注释的行数较少,一般使用行注释。对于连续多行的大段注释,则使用块注释,块注释通常以“/*”开始,以“*/”结束,注释的内容放在它们之间。
例如,在输出“Hello World”的程序中使用块注释将输出Hello World字符串和定位控制台窗体的C#语句注释为无效代码,代码如下。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00113.jpg?sign=1739920075-0ixuqIoddiYUiVwDfpKZdP2B2AJIOHOx-0-c6dfb15efd57a0e94cc3ef9fc3c2a540)
技巧:块注释通常用来为类文件、类或方法等添加版权、功能等信息。例如,下面的代码使用块注释为Program.cs类添加版权、功能及修改日志等信息。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00114.jpg?sign=1739920075-C9E7m1sHMb91Uq1Okx22s4lba01Fw2Hy-0-eb20dbcac383945f565decc76c1d8024)
2.2.7 一个完整的C#程序
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00116.jpg?sign=1739920075-GarIV1v8jBh1gfdcq19wMoUQXpf2Ge6A-0-dcf232b8476a78ebee52890c67b98888)
通过以上内容的讲解,我们熟悉了C#程序的基本组成,下面通过一个示例讲解如何编写一个完整的C#程序。
示例2.输出软件启动页
使用Visual Studio 2017创建一个控制台应用程序,然后使用Console.WriteLine方法在控制台模拟输出“编程词典(珍藏版)”软件的启动页,代码如下。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00117.jpg?sign=1739920075-ZbYRPcW65uhsPBWa8b8o3NBKqVO1oY7a-0-dfc21e3bf079b4317958f2ac451fd655)
完成以上操作后,单击Visual Studio 2017工具栏中的图标按钮即可运行上面的代码,代码运行结果如图2.16所示。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00119.jpg?sign=1739920075-zvnd127gDDy1FShRJEEXgGmUqPUEtgsP-0-e068a3459a7ea94ce3776192d03f9e4b)
图2.16 输出软件启动页代码运行结果
2.3 程序编写规范
下面给出两段实现同样功能的C#代码,如图2.17所示。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00120.jpg?sign=1739920075-oHHYsoMoaakVTnZDg6asibGChZFg3n5c-0-5455a5c2b19ceb491c02762c6cfa633b)
图2.17 两段实现同样功能的C#代码
大家在学习时,愿意阅读图2.17中的左侧代码还是右侧代码?相信大家更喜欢阅读图2.17中的右侧代码,因为它看上去更加规整——这是一种基本的代码编写规范。本节将对C#代码的编写规则及命名规范进行介绍。遵循一定的代码编写规则和命名规范可以使代码更加规范化,对代码的理解与维护起到至关重要的作用。
2.3.1 代码编写规则
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00121.jpg?sign=1739920075-jQ1Ac5VYUQ4wmBdnh1wF39qW8QlczYhG-0-9249c41413647f6f4ac26b9075fcd331)
代码编写规则通常对应用程序的功能没有影响,但对于改善对源代码的理解是有帮助的。养成良好的代码编写习惯对于软件的开发和维护都是很有益的,下面列举一些常用的代码编写规则。
·在编写C#程序时,统一代码缩进的样式,比如统一缩进2个字符或4个字符。
·每写完一行C#代码,都应该换行编写下一行代码。
·在编写C#代码时,应该合理使用空格,以便使代码结构更加清晰。
·尽量使用接口,然后使用类实现接口,以提高程序的灵活性。
·关键的语句(包括声明关键的变量)必须要写注释。
·建议局部变量在最接近使用它的地方声明。
·尽量不要使用goto系列语句,除非是在跳出深层循环时。
·避免编写超过5个参数的方法。如果要传递多个参数,应使用结构。
·避免编写代码量过大的try-catch语句块。
·避免在同一个文件中编写多个类。
·在生成和构建一个长的字符串时,一定要使用StringBuilder类型,而不要使用string类型。
·对于if语句,应该使用一对“{ }”把语句块包含起来。
·对于switch语句,一定要有default语句来处理意外情况。
2.3.2 命名规范
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00122.jpg?sign=1739920075-qHWP3xz7mqqwCPb5H7xwirG1Il0RSZYG-0-57d88380ef8d4bcc06d76de8223a4d43)
命名规范在编写代码中起着很重要的作用,虽然不遵循命名规范程序也可以运行,但是使用命名规范可以更加直观地了解代码所代表的含义。本小节将介绍C#中常用的一些命名规范。
1.两种命名方法
在C#中,常用的命名方法有两种,分别是Pascal命名法和Camel命名法,下面分别对其进行介绍。
·用Pascal命名法来命名方法和类型。Pascal命名法的第一个字母必须为大写,并且后面连接词的第一个字母也为大写。
说明:Pascal是以纪念法国数学家Blaise Pascal而命名的一种编程语言,C#中的Pascal命名法就是根据该语言的特点总结出来的一种命名方法。
例如,定义一个公共类,并在此类中创建一个公共方法,代码如下。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00123.jpg?sign=1739920075-x3b53vhPXVniBvQgv2o71XseMezX7ZWm-0-57d8eb6111a643a99e7a9ef2e714adcd)
·用Camel命名法来命名局部变量和方法的参数。Camel命名法指名称中第一个单词的第一个字母为小写。
说明:Camel命名法又称为驼峰式命名法,它是由骆驼的体型特征推理出来的一种命名方法。
例如,声明一个字符串变量和创建一个公共方法,代码如下。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00124.jpg?sign=1739920075-wKNLaNkiWoXZ2SX8gKfdd53KzGdjEPAX-0-3741d48a3be6424cd723b661326a6687)
2.程序中的命名规范
在开发项目时,不可避免地会遇到各个程序元素的命名问题,比如项目的命名、类的命名、方法的命名等。例如,在图2.18中声明了一个User类,在图2.19中声明了一个aaa类。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00125.jpg?sign=1739920075-McnGCnRUUPGxZLGLC5EHY1VJ1Z4rD8tP-0-54cdc38662f0bd07a39a2498678ae9c4)
图2.18 声明User类
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00126.jpg?sign=1739920075-0sYAabs3M48BPbmdurWAUu7HusNoDH0u-0-385d548008b6101b5f1b1a3b4630cf9a)
图2.19 声明aaa类
从类的命名上可以很容易地看出,图2.18中的User类应该是与用户相关的一个类,但是对于图2.19中声明的aaa类,很难对其功能进行直观判断。从这两个例子可以看出,在对程序元素进行命名时,如果遵循一定的规范,将使代码更加具有可读性。下面介绍常用程序元素的基本命名规范。
·在命名项目名称时,可以使用公司域名+产品名称,或者直接使用产品名称。
例如,利用公司名和产品名定义命名空间,在命名项目时,可以将项目命名为“mingrisoft.ERP”或“ERP”,其中,mingrisoft是公司的域名,ERP是产品名称。
·用有意义的名字定义命名空间,如公司名、产品名。
例如,利用公司名和产品名定义命名空间,代码如下。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00127.jpg?sign=1739920075-6pHf173RJwxxGHDykSs9pfwOKahxUhYG-0-0d560e6e5a58a1844b5ce7faa0efaf78)
·接口的名称加前缀“I”。
例如,创建一个公共接口Iconvertible,代码如下。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00128.jpg?sign=1739920075-dU90JGRQ1PwcwkfxoOIyvPdafSmsvlN8-0-23880c4ec114217ae39473db2c3b1a04)
·类的命名最好能够体现出类的功能或操作。
例如,创建一个名称为Operation的类,用来作为运算类,代码如下。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00129.jpg?sign=1739920075-eOPCQTeqFAvBCxdg9VqQxyJbCaKoOOc2-0-dd891e2c95212dd81fbf34320fd70447)
·方法的命名:一般将其命名为动宾短语,表明该方法的主要作用。
例如,在公共类File中创建CreateFile方法和GetPath方法,代码如下。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00130.jpg?sign=1739920075-6hs6YGk6exltbPZbbneJ1pLKyagOw7UT-0-fc0df1c6256d8c4bcd00034b95b1ce40)
·定义成员变量时,最好加前缀“_”。
例如,在公共类DataBase中声明一个私有成员变量_connectionString,代码如下。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00131.jpg?sign=1739920075-Fubi3Viz7k4aPpCYLW6Q22COlE3I7DRm-0-71f4b8397b66dc024e02ebe4f0c9c9ec)
2.4 小结
本章主要介绍了C#程序的结构、代码编写规则和命名规范。在C#程序的结构中,读者需要重点掌握命名空间、类及C#语句。其中,命名空间在C#程序中占有重要的地位,通过引入命名空间可以将命名空间下的类引入当前项目;类是C#的核心和基本构成模块,开发人员可以通过编写各种类来描述在实际开发中需要解决的问题;语句是构造所有C#程序的基本单位,程序中的任何逻辑操作都需要通过C#语句实现。另外,在编写程序代码时,读者要养成一种良好的编写习惯,本章列出的一些常用的代码编写规则和命名规范,希望对读者有所帮助。
2.5 快学快用
(1)在控制台应用程序中输出马云在阿里巴巴上市时说的一句经典语录:“梦想还是要有的,万一实现了呢!”
(2)使用C#在控制台输出“情人节快乐”图案,程序运行结果如图2.20所示。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00132.jpg?sign=1739920075-9CTJ6MbuVMxtgC94BSoJVsezAMEKSwTK-0-c2417bce16abc229e660b8292d68d516)
图2.20 在控制台输出“情人节快乐”图案程序的运行结果
(3)在控制台应用程序中模拟以下场景。
计算机输出“欢迎使用XXX充值业务,请输入充值金额:”。
用户输入“100”。
计算机输出“充值成功,您本次充值100元”。
(4)使用C#在控制台输出百花园图案,程序运行结果如图2.21所示。
![](https://epubservercos.yuewen.com/32D519/16896238104365606/epubprivate/OEBPS/Images/00133.jpg?sign=1739920075-oWCo4RRJkybpDNRRy4nuYRlIwVaiZ59M-0-51c7ce42ca2a06d2d00f7e3c2169d6e1)
图2.21 输出百花园图案程序的运行结果