一、填空题
1. C#每条语句以 “;” 字符结尾。
2. C#提供了两种注释方法:单行注释和 多行注释 。
3. C#值类型包括简单类型、 结构类型 和枚举类型。
4. 实数在C#中采用两种数据类型来表示: 单精度 和双精度。
5. C#中提供了 隐式转换 和显式转换两种转换类型。
6. C#中提供了三种程序控制语句:顺序语句、 选择语句 和 循环语句 。
7. 面向对象的三大特性为:封装性、继承性和 多态性 。
8. C#中类的方法可以分为三种类型:无返回值方法、有返回值方法和 带参数方法 。
9. C#方法的参数有四种类型: 值参数 、 引用参数 、 输出参数 和参数数组。
10. C#中区分重载方法的条件是:不同的参数类型或者 不同的参数个数 。
11. C#中多态性分为 编译时的多态性 和运行时的多态性。
二、简答题
1. 简述C#简单类型由哪几种数据类型组成?
由整数类型、布尔类型、字符类型和实数类型组成。
2. 叙述C#中常用的字符串操作及其功能。
字符串类型的相关操作
操作名称 |
基本形式 |
返回值 |
CompareTo |
strA.CompareTo(strB) |
若strA小于strB:返回负数 |
若strA等于strB:返回0 |
||
若strA大于strB:返回正数 |
||
Length |
strA.Length |
返回字符串strA的长度 |
IndexOf |
strA.IndexOf (strB) |
返回strB在strA中的起始位置,如果在strA中找不到strB,返回负数 |
Trim |
strA.Trim() |
清除字符串前面或后面的空格 |
Insert |
strA.Insert(i, strB) |
在字符串strA第i个位置插入strB |
Remove |
strA.Remove(n,m) |
删除strA中n开始长度为m的字符 |
Replace |
strA.Replace(sA,sB) |
将strA中sA部分字符串替换成sB |
Substring |
strA.Substring(n,m) |
截取strA中n开始长度为m的字符 |
+ |
strA+ strB |
返回strA连接strB的结果字符串 |
3. 简述C#中装箱和拆箱的基本概念。
值类型和引用类型之间是可以相互转换的,装箱操作就是将值类型转换为引用类型的过程,同理拆箱操作就是将引用类型转换为值类型的过程。在装箱和拆箱的过程中,任何类型都可以和object类型之间进行转换。
4. 叙述C#中变量的命名规则。
变量名的命名规则如下:
(1)必须由字母、数字和下划线“_”组成,不能包含空格、标点等其他符号,第一个字符必须是字母或者下划线。
(2)区分字母的大小写,只要两个变量名对应字母的大小写不同,即认为是两个不同的变量。如:teacher和teaCher被认为是两个不同的变量。
(3)变量名不能与系统的定义的关键字同名。如果一定要用C#的关键字作为变量名,则应使用“@”作为前缀,但强烈建议不要这样做。关键字是对C#编译器具有特殊意义的预定义保留字,如if、for、while等。
(4)C#的变量名最多可以由511个字符组成,建议变量名不要太长,一般不超过31个字符为宜。
5. 叙述C#中声明匿名变量需要注意哪些问题。
声明匿名变量时需要注意以下三个方面:
(1)声明匿名变量时,必须同时为该变量赋初值,即初始化
(2)匿名变量仅限于局部变量,而且不能被赋予空值。
(3)var本身不是一个新类型,编译器会根据匿名变量被赋予的初值推断出该变量具体的数据类型。
6. 叙述C#中隐式转换和显示转换的概念和特点。
是系统默认的类型转换方式,也是编译器自动支持的转换方式,该方式不需要事先加以声明,也不需要编写代码就可实现转换。并不是所有的类型之间都可以进行隐式类型转换,一般要求被转换类型的取值范围完全包含在转换到的类型的取值范围之内时才可以进行隐式转换,即范围小的数据类型向范围大的数据类型才可转换,且两种类型要兼容。
显示转换又称为强制类型转换,用于当隐式转换不能正确实现转换时,在代码中明确地声明将一种数据类型转换成另一种数据类型的行为。和隐式类型转换正好相反,显示类型转换是从范围大的数据类型向范围小的数据类型进行转换。如果要将某个表达式显示转换为特定的数据类型,需要在该表达式前面加上被转换的类型说明符,并且该类型说明符需要用括号括起来。
7. 简述C#中DateTime关键字应用的基本形式和表示日期时间的范围。
C#中使用DateTime关键字来定义日期和时间对象,其表示的范围是从公元0001年1月1日午夜 12:00:00 到公元9999年12月31日晚上11:59:59之间。创建一个新的日期时间对象的格式如下:
DateTime 对象名称 = new DateTime(yyyy,MM,dd,hour,minute,second); |
其中参数yyyy用于设置年的数值,参数MM用于设置月的数值,参数dd用于设置日的数值,参数hour用于设置小时,参数minute用于设置分钟,参数second用于设置秒,所有参数均为整型。
8. 简述C#中运算符的特点与分类标准。
实际计算中,先进行高优先级的运算,后进行低优先级的运算,即运算符的优先级决定了表示式中运算的先后次序。同优先级的运算符运算次序由它们的结合性来决定(自左向右、自右向左)。
如果依据运算符所涉及操作的个数作为分类标准,可分为一元运算符(涉及一个操作数,如自增、自减运算符)、二元运算符(涉及二个操作数,如乘法、除法运算符)、三元运算符(涉及三个操作数,如条件运算符);如果依据运算符的运算性质作为分类标准,则可分为算数运算符、关系运算符、赋值运算符等。
9. 简述C#中continue语句和break语句用于循环结构中的区别。
continue语句用于循环结构中,实现结束本次循环并开始下一次循环的操作,本次循环循环体中未被执行的语句将不再被执行。
break语句用于跳出本层循环的执行。
10. 叙述C#中常用的类修饰符的名称及其含义。
① public:public修饰的类是公共访问类,其访问权限最高,可以被任何其他类所访问。
② protected:protected修饰的类是受保护类,只能被其自身或者派生类来访问。
③ private:private修饰的类是私有类,其访问权限是最低的,只能被其自身所访问。
④ internal:internal修饰的类是可以内部访问的类,只有在同一程序集之间的类才能够访问。
⑤ new:只允许在嵌套类声名时使用,表示类中隐藏了由基类继承而来的、与基类中同名的成员。
⑥ abstract:abstract修饰的类是抽象类,该类是一个不完整的类,只有声明而没有具体的实现。抽象类不允许建立类的实例,只能被其它类继承。
⑦ sealed:sealed修饰的类是密封类,不允许被其他类继承。
11. 简述C#中static字段的特点与含义。
static修饰的字段称为静态字段,而其他修饰符修饰的字段称之为实例字段。静态字段在内存中是唯一存在的,当类第一次被创建对象时,这个字段就会被建立,以后利用该类再创建对象时,将不再重复建立该静态字段。因而静态字段数据类,为类的所有对象所共享。静态字段只能通过类来访问,而实例字段只能通过对象来访问。
12. 简述C#中this关键字的特点与含义。
this关键字仅限于在类的方法和构造函数中使用。在构造函数中出现的this表示对正在构造的对象本身的引用;在类的方法中出现的this表示对引用该方法的对象的引用。
13. 叙述C#中使用扩展方法需要注意的事项。
使用扩展方法需要注意以下几个事项:
① 声明扩展方法的类必须是静态类,即需使用“static”关键字来创建。
② 扩展方法属于静态方法,即需使用“static”关键字来声明。
③ 声明扩展方法时,第一个参数必须使用this关键字来修饰。
④ 使用扩展类型的变量来调用扩展方法。
⑤ 扩展方法可以实现对已存在的数据类型进行扩展,但不用乱用扩展方法。
14. 简述C#中类索引器的含义和功能。
索引器是一种特殊的类成员,其主要功能是使对象能够像数组一样被方便地引用。当一个类包含有数组或者集合成员时,使用索引器将大大简化对数组或集合成员的存取操作。定义索引器的语法格式和定义属性的语法格式比较相似。
15. 叙述C#中构造函数的功能与特性。
构造函数是创建类的对象时自动执行的一种特殊方法。当创建一个类时,将自动生成一个构造函数,该构造函数是系统自动帮助开发人员显示出的默认构造函数,参数部分和函数体部分均为空。构造函数通常具有以下特性:
(1)构造函数的方法名和类名相同。
(2)构造函数没有返回类型,并且访问修饰符通常为public。
(3)构造函数主要用于实现对类的对象进行初始化,当访问一个类时,它的构造函数最先被执行。
(4)当使用new关键字创建一个类的对象时,系统会自动调用该类的构造函数对对象进行初始化操作。
(5)一个类可以有多个构造函数,如果没有定义构造函数,系统会自动生成一个默认的构造函数。
(6)构造函数可分为实例构造函数和静态构造函数。使用static修饰符修饰的构造函数称为静态构造函数,主要用于对类的静态字段进行初始化,其不带有参数,不能被static之外的其它修饰符修饰,也不能被调用;使用static之外的修饰符修饰(通常使用public修饰)的构造函数称为实例构造函数,主要用于对类的对象进行初始化,可以带有参数并能被调用。
16. 简述C#中接口的概念及其特点。
接口(interface)是一种与类相似的结构。一个接口定义一个协定,实现接口的类必须遵守其协定。接口中只能定义方法、属性、事件和索引器这四种类型的成员,但不能在接口中声明字段。并且在接口定义中,只能存在这些成员的声明,不能对这些成员进行实现,对这些成员的实现需要通过类来完成。即接口只是提供了一项功能,并没有提供对该功能实现的具体方法。例如日常生活中的灯头便是一个接口,在这个接口上可以按上白炽灯泡或者荧光灯(相当于实现接口的类),由于白炽灯和荧光灯在功能和实现方法上存在很大的差别,因而可以实现“接口不变,接口的实现细节千差万别”,用户可以设计一个更理想、更完善的类来实现接口。
在接口中不存在构造函数,因而不能利用接口来创建对象。任何实现接口的类都必须实现接口中所规定的全部方法,否则该类只能被定义成抽象类(abstract修饰)。