C#复习题(概念) --C#学习笔记
第一章
1、公共语言架构(CLI)由哪几部分组成?
(1)通用类型系统:定义了一套类型系统的框架,规定了数据类型的声明、使用和管理方法。
(2)公共语言规范:一组语言规则的集合
(3)通用中间语言:一种中性的、与处理器无关的指令语言
(4)其他通用的标准化文档、协议、规范等。
2、CLI的主要功能是什么?
(1)管理代码的执行。各类.NET应用程序的代码被编译为通用的中间语言。
(2)提供系统服务,以保证程序运行的可能性,由CLR对程序执行细节进行封装,开发人员就可以专注于程序的业务逻辑和功能流程,大大降低了开发难度,提高开发效率。
3、什么是托管代码?什么是非托管代码?
(1)满足公共语言要求,基于CLI编译和运行的程序代码被称为托管代码
(2)非托管代码是指直接编译成目标计算机的机器码,必须自己提供垃圾回收机制、类型检查机制和安全支持等服务。
区别:编译运行过程不同,跨平台性不同,运行性能不同。
4、C#语言代码经编译后生成的是什么代码?
中间语言代码。
5、什么是命名空间?什么是程序集?
(1)命名空间是C#代码的基本组织形式,成员必须属于类型,类型又必须属于命名空间,一个命名空间还可以嵌套在另一个命名空间中。
(2)程序集是应用程序的基本组织单元,除了可执行文件(.exe)外,动态链接库(dll)也是另一种常见的程序集程序。
6、C#程序的执行过程?
程序一开始就执行main方法,同时执行main方法里的方法,直到main方法执行完。
第二章
1、简单值类型有哪些?复合值类型有哪些?区别是什么?
(1)简单值类型可以再细分:整数、字符、实数和布尔类型;
(2)复合类型是简单类型的复合,它包括结构和枚举;
(3)区别:复合值类型是是简单值类型的复合
2、引用类型有哪些?如何定义?
(1)引用类型包括类、数组、接口、委托、字符串等。
(2)定义:引用类型是从基本类型里构造而来的类和其他复杂数据类型组成的,这种类型的变量并不包括类型的实例,而是包括对实例的引用。类:使用class关键字定义;数组:一维数组类型的表示是元素类型加一对双括号,如int[]多维数组的定义通过中括号里的逗号来划分数组的维数,如int[] a = new int[1,2];接口:泛指实体把自己提供给外界的一种抽象化物,用以由内部操作分离出外部沟通方法,使其能被修改而不影响外界其他实体与其交互方式;委托:将一个方法/函数封装成一个值进行传递;字符串:放在一对双引号里,是对一组字符的封装,字符串中定义完成以后就是只读的。
3、如何进行数组定义和初始化?(以一维数组为例)
(1)定义:元素类型加上一对中括号
(2)初始化:
string []arrayA = {"a","b"};
int[] arrayB;
arrayB = new int[3]{1,2,3};
4、值类型和引用的区别?
(1)值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或者引用;
(2)值类型继承自System.ValueType,引用类型继承自System.Object
(3)值类型存取速度快,引用类型存储速度慢
(4)值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在堆中;
(5)值类型在内存管理方面具有更好的效率,并且支持堕胎,适合用于存储数据的载体,引用类型支持多态,适合用于应用程序的行为;
(6)引用类型可以派生出新的类型,而值类型不可以
5、为什么要进行类型转化?什么是显示转换?什么是隐式转换?类型转换的基本规则?
(1)当传递参数与所需参数类型不一致时,就需要进行类型转换。
(2)显示转换:显示转换又叫强制类型转换,它需要明确指定转换类型。
(3)隐式转换:它不需要明确指定转换类型
(4)数值类型转换基本规则:从低精度类型到高精度类型可以进行隐式转换,相反则需要手动进行显示转换,总精度相同的无符号数值类型向有符号数值类型转换也是显示转换。引用类型转换规则:从派生类到基类可以进行隐式转换,从基类到派生类只能进行显示转换,且不一定成功。如果转换成功,那么两个变量将指向同一个对象;装箱过程是从值类型到引用类型的隐式转换,其中包括任何值类型到Object类型的转换以及从一个值类型到它所实现的接口类型转换。拆箱的过程和装箱过程和装箱过程正好相反,它实现了从引用类型到值类型的显示转换,其中包括Object类型到任何值类型的转换,以及从某个接口类型到继承该接口的某个值类型的转换。
第三章
1、什么是实例字段、静态字段?怎样访问它们?
(1)实例字段:在类或结构中定义的一般数据成员,属于类或结构的单个对象。访问:圆点连接符前面加上对象具体名称
(2)静态字段:在字段定义时前面前面加上一个static关键字,属于类或结构的所有字段
(3)访问方法:圆点连接符前面加上类型名称
2、什么是静态字段、只读字段?常数字段怎么初始化?
保存一些不发生变化的数值,使用const关键字修饰的字段叫做常数字段;常数字段在初始化的时候必须赋值,且赋的值必须是一个常量。
3、方法的引用参数与值类型参数的本质区别?输出型参数的特点?数组型参数怎么定义和使用?实参为数组的变量和一组变量的区别?
4、委托的本质是什么?怎么使用委托?
委托的本质是将一个方法或者函数封装成一个值进行传递
定义:委托的定义类似方法的签名,不过前面需要加上一个delegate关键字。
5、访问限制的种类和基本的使用规则?
(1)public修饰符:表示成员是共有的,无论在哪里都可以进行访问
private修饰符:成员是私有的,只有在类型内部进行访问
protected修饰符:成员是保护的,只能被当前类及派生类的方法成员访问
internal修饰符:表示可在程序集内部访问, 即可通过当前类型或者同一程序集中和其它类型访问,而不允许其它程序集的类型访问。
(2)对类型在而言,派生类的访问限制不能低于基类的访问限制,对类型成员而言,字段的访问的限制不能低于其类型的访问级别;方法的访问限制级别也不能低于其方法参数类型的访问级别,如果一个类型是嵌套在另一个类型中,那么内部类型的访问级别不能高于外部类型。
第四章
1、double型变量x和y的取值分别为12.5和5.0,那么表达式x/y+(int)(x/y)-(int)x/y的值是多少?
x/y=12.5/5.0=2.5
(int)(x/y)=(int)(2.5)=2
(int)x/y=12/5.0=2.4
x/y+(int)(x/y)-(int)x/y = 2.5+2-2.4=2.1
2、int型变量x的值为9,那么表达式(x--+x--+x--)和表达式(--x+--x+--x)的值分别是多少?
x--+x--+-- = 9+8+7=24,先取x的值
--x+--x+--x = 8+7+6=21,先x减1
3、bool型变量a和b的取值分别为true和false,那么表达式a&&(a||b)和a||(a&&!b)的值分别是什么?
(1)true&&(true||false)为true
(2)true||(true&&!false)为true
4、as类型转换操作与is类型操作有何不同?和一般类型转换有何不同?
as是一个二元的类型转换符,与is不同的是as只能进行引用类型的转换或装箱转换,而不能在两个值类型之间进行转换