- C# 从入门到项目实践(超值版)
- 聚慕课教育研发中心
- 2879字
- 2021-03-24 02:36:09
2.2 C#基本语法
C#是一种面向对象的编程语言。在面向对象的程序设计方法中,程序由各种相互交互的对象组成。相同种类的对象通常具有相同的类型,或者说是在相同的class中。
2.2.1 命名空间、标识符及关键字
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P33_4885.jpg?sign=1739554035-AWm9jgVnJCaxWEgTXqGbtXEAvkMg4pQp-0-2ed922c77f9c36cb245ed8c2c07aa044)
1. 命名空间
命名空间是.NET中提供应用程序代码容器的方式,这样就可以唯一地标识代码及其内容。
在C#中,创建命名空间的关键字是namespace,在运行Visual Studio 2017时会自动加入命名空间,格式为namespace空间名称。命名空间是以“层”形式存在的,如果有多层,则以“.”分开。
例如:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T34_66066.jpg?sign=1739554035-UyIXtVUgnZ5A7UIrYLHaLzLG3oeTjpXj-0-13537c9a71d752c7ffe97a72a01f74a0)
在引用Generic命名空间时,需要引用System命名空间,然后再引用Collections命名空间。这就好比每层包含的文件夹,打开System文件再打开Collections文件,就找到Generic文件了。
在引用命名空间时需要注意以下两点:
(1)有时命名空间相当长,输入时很烦琐,则可以使用using关键字,在文件的顶部列出类的命名空间,这样引用一个命名之间后,访问其空间内的方法就如同向在其类内访问一样。
(2)using还有另一个作用,就是给命名空间一个别名。如果命名空间的名称非常长,又要在代码中使用多次,而用户不希望该命名空间的名称包含在using指令中,这时就可以给该命名空间指定一个别名。
其语法如下:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T34_66067.jpg?sign=1739554035-H2ic4wZFmX4TNgJlXPePu9w5PRj1Zpq9-0-cf06eecae225b76d49b34ef5a0289d09)
【例2-2】编写程序,通过别名引用命名空间。
(1)在Visual Studio 2017中,新建名称为“Project2”的文件。
(2)在代码编辑区域输入以下代码。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T34_66068.jpg?sign=1739554035-FZmWDAo6UUxfzTvLJ6CNlpe2ux5l3YaM-0-b1b3e6274cf3175ffe636ce97e7d87b5)
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P34_4995.jpg?sign=1739554035-HWzhXilnD5v5Qw3XgPS7erscNQdetOly-0-74dc2c06f31073e39f93ee7f8bfa4197)
图2-2 引用命名空间
【程序分析】本例演示了通过别名引用命名空间。在代码的开头部分,使用using指令声明一个别名MK,代替System命名空间中的Console类。然后在Project2命名空间的Main方法中,使用MK,引用WriteLine方法,并输出一段语句。
在Visual Studio 2017中的运行结果如图2-2所示。
2. 标识符
标识符是程序编写人员为常量、变量、数据类型、方法、函数、属性、类、程序等定义的名称。在命名标识符时应当遵守以下规则:
(1)标识符不能以数字开头,也不能包含空格。
(2)标识符可以包含大小写字母、数字、下画线和@字符。
(3)标识符必须区分大小写。大写字母和小写字母被认为是不同的字母。
(4)@字符只能是标识符的第一个字符。带@前缀的标识符称为逐字标识符。
(5)不能使用C#中的关键字。但是,@字符加关键字可以成为合法的标识符,建议不要这样做。
(6)不能与C#的类库名称相同。
3. 关键字
关键字对于C#编译器而言,是具有特定含义的名称,例如程序中的using、class、static、void都属于关键字。如果错误地将关键字用作标识符,编译器会产生错误,用户马上就会知道出错了,所以不必担心。但是,如果用户想使用这些关键字作为标识符,可以在关键字前面加上@字符作为前缀。
下面列出了C#中所有的保留关键字。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T35_66075.jpg?sign=1739554035-QAJ6j3AIn7VNGpY1HmeF4JnG7HiUMXZV-0-bd5b4059818efdd62a351c462184c300)
4. 上下文关键字
上下文关键字仅在受限制的程序上下文中具有特殊含义,并且可在该上下文外部用作标识符。但是它不是C#中的保留字,用户可以将这些关键字用作自己的方法、变量和类的标识符,如下所示。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T35_66077.jpg?sign=1739554035-aYYsq9zmLBVnagZOGRevsOiy0xWhW9qG-0-8ff258f7d089bb3b5a8e53f7e64d1b9d)
注意:在Visual Studio 2017的代码和文本编辑器窗口中输入这些关键字时,它们的颜色默认为蓝色。
2.2.2 类名
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P35_5029.jpg?sign=1739554035-p4nKd557seLpFF3qQiLsja52zMr5jlyF-0-e507b5518b130ae8988b3370ccdc4ca7)
当用户定义一个类时,就表示定义了一个数据类型的蓝图。这实际上并没有定义任何的数据,但是它定义了类的名称,这就意味着类的对象由什么组成以及在这个对象上可执行什么操作。对象是类的实例。构成类的方法和变量称为类的成员。
C#中所有的语句都必须位于类的内部。因此,类是C#语言的核心和基本构成模块。C#支持自定义类,使用C#编程就是编写自己的类来描述实际需要解决的问题。
类的定义是以关键字class开始,后跟类的名称。类的主体,包含在一对花括号内。下面是类定义的一般形式:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T35_66078.jpg?sign=1739554035-gnIpYyrBuadkNfFnKC3ONhRSWz5aC29K-0-73796bb339c8872706f6f921cde79bf0)
注意:
(1)类修饰符指定了对类及其成员的访问规则。如果没有指定,则使用默认的访问标识符。类的默认访问标识符是internal,成员的默认访问标识符是private。
(2)在C#中,类名是一种标识符,必须符合标识符的命名规则。类名要能够体现类的含义和用途,类名一般采用第一个字母大写的名词,也可以采用多个词构成的组合词。
(3)如果要访问类的成员,用户要使用点“.”运算符。点运算符连接了对象的名称和成员的名称。
例如,声明一个简单的类,该类没有任何意义:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T36_66082.jpg?sign=1739554035-Zc3E72eqWv0wc027Wgmkhlx1VogcS5D1-0-0fe5ca1121755e0d5b8f9d3616045e00)
2.2.3 Main方法
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P36_5142.jpg?sign=1739554035-LkfLFrV14DtzxweYx7Ri12cJr3oKXQKK-0-92ddeda325665e02da28ae16e5d200a5)
1. Main方法简介
(1)一般情况下,一个C#可执行程序只有一个应用程序对象(也就是程序入口),但是在某些情况下,可能会有多个应用程序对象(程序入口),如单元测试中,这个时候就需要通过命令行指定以哪个Main方法作为程序的入口。
(2)分析Main方法,用户可以发现Main方法通过static修饰,这主要是让用户可以通过类名加方法的形式调用Main方法,用户在调用之前不需要创建对象的实例(也就是new出该对象)。
(3)分析Main方法的参数是一个字符串(string[] args),这个参数可以包含任意数量的命令行输入参数。
2. C#中Main方法的形式
在默认情况下,Visual Studio 2017生成的Main方法有一个void返回值,并且只接收一个参数(一个字符串数组,用于接收任意数量的命令行输入参数)。
例如:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T36_66083.jpg?sign=1739554035-Vgqx0XWshnj6kNqIt0B6h0x9MVzcWjWz-0-920b91205c3f4af5648a51d5a32e5b5f)
这并不是唯一的Main方法的形式,以下的Main方法作为程序的入口点都是被允许的。
(1)整型返回类型,以字符串数组作为参数。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T36_66084.jpg?sign=1739554035-HQ4wH8yjYxyTXe02Q5s0Z5STAI9JigwQ-0-e733cf5d9d06ade40f8bddb122219e7f)
(2)没有返回值,没有参数。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T36_66085.jpg?sign=1739554035-EFOpAja20sIDS9qAnt3f4sBUaFAWFyyc-0-44fef87b24752063a65ab7283cb7c00b)
(3)整型返回类型,没有参数。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T37_66086.jpg?sign=1739554035-6N1nEHBybHEyFVvV4lL7VNpcPU10FOSu-0-1aa8d5d871728bf9c52b6fd190f1e0bf)
注意:如果不给Main方法提供一个修饰符,那么Main方法默认就是私有的,当然Main方法可以定义成共有的,但是Visual Studio 2017会把程序的Main自动定义成隐式私有的,以确保其他程序不能直接调用另一个程序的入口点。
3. Main方法返回错误
绝大多数的Main方法会以void作为返回值,但是C#和其他C类型的语言一样,都可以从Main返回一个int。根据惯例,返回值0表示程序正常结束,而其他值(如-1)表示程序有异常发生。
2.2.4 代码注释
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P37_5232.jpg?sign=1739554035-B7KR9FGnaft0LemkDqCJs4Je7KnQfDyZ-0-e0042cf657535252f3e609c50ae7f819)
注释用于解释代码。编译器会忽略注释的条目。在C#程序中,多行注释以“/*”开始,并以字符“*/”终止,如下所示:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T37_66088.jpg?sign=1739554035-RLwhtuerOlE5YIyPEc2VqUKUY14pXMbI-0-040b6d8e71711695f6b39d142986b490)
单行注释是用“//”符号表示。
例如:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T37_66089.jpg?sign=1739554035-V9S3KcUgheBDyjyxgrFtdBA6Kd4CTb0Z-0-5b5a0a638d9bb55005077a24f64a587b)
2.2.5 C#语句
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P37_5233.jpg?sign=1739554035-09cGRcYz870e2RkDOH9uYrhXywOKAI8L-0-e2138464f341ccdd21e0b1ec8be3c257)
程序执行的操作采用语句表达。常见操作包括声明变量、赋值、调用方法、循环访问集合,以及根据给定条件分支到一个或另一个代码块。语句在程序中的执行顺序称为“控制流”或“执行流”。根据程序对运行时所收到的输入的响应,在程序每次运行时控制流可能有所不同。
语句可以是以分号结尾的单行代码,也可以是语句块中的一系列单行语句。语句块括在大括号“{}”中,并且可以包含嵌套块。
下面列出了C#中的各种语句类型及其关联的关键字。
(1)声明语句。声明语句引入新的变量或常量。变量声明可以选择为变量赋值。在常量声明中必须赋值。
例如:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T37_66090.jpg?sign=1739554035-7tHvrMV7KF2B0DZWDj2ri1bqT2uUiXf7-0-7976ad441fed9874e91957d9fef9c03b)
(2)表达式语句。用于计算值的表达式语句必须在变量中存储该值。
(3)选择语句。用于根据一个或多个指定条件分支到不同的代码段。这一类语句包括if和switch语句。
(4)迭代语句。用于遍历集合(如数组),或重复执行同一组语句直到满足指定的条件。这一类语句包括while、do、for和foreach语句。
(5)跳转语句。用于将控制转移给另一代码段。这一类语句包括break、continue、goto、throw、return和yield语句。
(6)异常处理语句。用于从运行时发生的异常情况正常恢复。这一类语句包括throw、try…catch、try…finally和try…catch…finally。
try…catch语句用于捕获在代码块执行期间发生的异常,try…finally语句用于指定始终执行的最终代码,无论异常发生与否。
(7)checked和unchecked。用于指定将结果存储在变量中但该变量过小而不能容纳结果值时,是否允许数值运算导致溢出。
(8)using语句。用于获取资源,执行语句,然后释放资源。
(9)空语句。空语句只含一个分号,不执行任何操作,可以在需要语句但不需要执行任何操作的地方使用。
例如:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T38_66092.jpg?sign=1739554035-R9QFpQlEU1Ndx1eSizAaXYHXriRfxD3g-0-e91bfa303dfdbce9fe81ccddefb4e5c1)