第一章.NET概述
一、名词解释
1.【基础题】MSIL:Microsoft Intermediate Language(微软中间语言),是一种类似
Java字节码的语言,也是为了能在不同平台移植所生成的中间代码。
2.【基础题】JIT:Just in Time 即时编译
3.【基础题】CLR:Common language runtime 通用语言运行时
4.【基础题】CLS:Common Language System 通用语言系统
5.【基础题】CTS:Common Type System 通用类型系统,定义了可以在中间语言中使用
的预定义数据类型,所有用于.NET Framework 的语言都可以生成最终基于这些类型的编译代码
6.【基础题】FCL:Framework Class https://www.wendangku.net/doc/a617371646.html,框架类库
二、选择
1.【基础题】当你在编写C#代码时,按了“F1”,你将获得(B)
A.一个错误信息
B.上下文帮助
C.windows帮助
D.打印帮助
2.【中等题】在.NET中,程序员在代码中漏写了一个大括号,这属于(C)
A.逻辑错误
B.运行时错误
C.语法错误
D.自定义错误
三、填空
1.【基础题】.NET Framework 两个主要组件分别是____公共语言运行库__和.NET
Framework 类库。
2.【中等题】公共语言运行库管理内存、线程执行、代码执行、代码安全验证、编译
以及其他系统服务。
3.【基础题】.NET Framework有两大主要特征:跨平台、跨语言。
4.【基础题】.NET平台基于两种核心技术,即XML和Internet协议套件
四、问答
1.【中等题】简述CLR(Common Language Runtime,通用语言运行环境)在.NET Framework
中的作用?
答:公共语言运行库管理内存、线程执行、代码执行、代码安全验证、编译以及其他系统服务。这些功能是在公共语言运行库上运行的托管代码所固有的
2.【基础题】JIT编译器主要功能是什么?
答:实时编译的功能将所有托管代码能够以它在其上执行的系统的本机语言运行。
3.【基础题】什么是DOTNET?DOTNET可开发什么应用程序?
答:.NET 是一种框架,一种平台,一种为下一代Internet 服务的全新体系结构。
DOTNET可开发Web窗体、Windows窗体、Windows控制台应用程序、Window服务、Web 服务等等。
4.【基础题】编写一个控制台应用程序,在控制台上显示出“你好,欢迎进入C#的世界!”
答:using System;
namespace Exercise
{
class Program
{
static void Main()
{
Console.WriteLine("你好,欢迎进入C#的世界!");
}
}
}
5.【中等题】C#源代码编译成为本地代码的编译过程?
答:源代码→编译器(1次编译)→中间语言(.exe)→CLR(JIT 2次编译)→本地代码
第二章数据类型
一、名词解释
1.【基础题】表达式:是指操作数和运算符的组合
二、选择
1.【基础题】下列选项中,(C)是引用类型?
A.enum类型
B.struct类型
C.string类型
D.int类型
2.【基础题】C#的数据类型有(B)
A、值类型和调用类型
B、值类型和引用类型
C、引用类型和关系类型
D、关系类型和调用类型
3.【基础题】以下哪个类是int的基类?( A )
A.Int32
B.Dotnet
C.double
D.System.Data
4.【基础题】下列选项中,哪个是引用类型(C )
A.char类型B.double类型
C.string类型D.int类型
5.【基础题】在C#中,下列变量定义与赋值正确的是(D )
A. int a=同学;
B. float a=老师;
C. double a=教室;
D.string a=“学校”;
6.【中等题】在C#中,下列表达式计算正确的是(B C)
A、10%3=3
B、10/3=3
C、10%3=1
D、10/3=1
7.【基础题】值类型存储于(A)
A、堆栈
B、堆
C、.队列
8.【基础题】C#中的所有数据类型都派生自(D)类
A、String
B、Int64
C、Int32
D、Object
三、填空
1.【基础题】sizeof 和typeof 运算符的作用获取对象的大小和类型、。
2.【基础题】C#字符串是使用string 关键字声明的,实际是它是一个引用类型。
3.【基础题】装箱是把值类型转换到引用类型。
4.【基础题】装箱、拆箱操作发生在引用类型与值类型之间
四、问答
1.【中等题】const和static readonly的区别?
答:用const修饰符声明的成员叫常量,在编译期初始化并嵌入到客户端的程序。用static readonly声明的成员依然是变量,只不过具有和常量类似的使用方法,通过类进行访问,初始化后不可以修改。
2.【基础题】bool类型有哪两个值?这两个值可以赋值给int变量吗?
答:True/False ,不能
3.【基础题】C#有那些数据类型?他们之间的区别?
答:C#支持的数据类型有:
值类型
包括:简单类型、结构类型、枚举类型。其中,简单类型又分为:整型、布尔型、字符型、浮点型、小数型。
引用类型
包括:对象类型、类类型、接口、元数据、字符串类型、数组。
值类型和引用类型的区别在于,值类型的变量直接存放实际的数据,而引用类型的
变量存放的则是数据的地址,即对象的引用。
4.【基础题】值类型存储于内存的哪个区?
答:值类型存储于栈区
5.【基础题】C#中的所有数据类型都继承于哪个类?
答:C#中所有数据类型都继承于Object。
6.【基础题】写出下列赋值表达运算后a的值,设原来a=12,n=5。a和n都定义为整型
变量
答:(1) a+=a 值为:24
(2) a-=a 值为:0
(3)a* = 2+3 值为:27
(4) a%=(n%=2) 值为:0
(5)a/=a+a 值为:13
(6)a+=a-=a*=a 值为:-120
第三章结构、枚举
一、名词解释
1.【基础题】Bll:bussiness logic layer 业务逻辑层
二、选择
1.【基础题】以下是一些C#中的枚举型的定义,其中错误的用法有(A)?
A.public enum var1{ Mike = 100, Nike = 102, Jike }
B.public enum var1{ Mike = 100, Nike, Jike }
C.public enum var1{ Mike=-1 , Nike, Jike }
D.public enum var1{ Mike , Nike , Jike }
三、填空
1.【基础题】结构体的关键字是struct。
2.【基础题】枚举的关键字是enum
3.【基础题】枚举是值类型,结构是值类型。
4.【提高题】结构只能定义带参数的构造函数,不能继承其它结构或者类。
四、问答
1.【提高题】结构和类有什么相似处和区别
答:结构是值类型,而类是引用类型。
向方法传递结构时,结构是通过传值方式传递的,而类是作为引用传递的
与类不同,结构的实例化可以不使用new 运算符
结构可以声明构造函数,但它们必须带参数
一个结构不能从另一个结构或类继承,而且不能作为一个类的基。所有结构都直接
继承自System.ValueType,后者继承自System.Object
不能在结构中初始化实例字段
2.【基础题】定义结构体类型的格式为:
答:struct <结构体类型名>
{
<成员类型1> <成员名1>;
<成员类型2> <成员名2>;
…
<成员类型n> <成员名n>;
};
3.【基础题】什么是枚举?
答:枚举是一个指定的常数,是一组已命名的数值常量。枚举是值类型的一种特殊形式。枚举从System.Enum继承而来
第四章程序控制语句
一、选择
1.【基础题】下面那些不是循环语句(D)
A、while
B、do
C、for
D、if…else
二、填空
2.【基础题】Switch语句中,每个case后是使用break语句来结束。
3.【基础题】跳转语句有break、continue、goto、return 。
4.【基础题】循环结构用于对一组命令执行一定的次数或反复执行一组命令,直到指定的
条件为真。
5.【基础题】C#语言中基本语句可以分为三种:赋值语句、选择语句、循环语句
6.【基础题】循环结构的类型有while 、do 、for 、foreach 。
三、问答
1.【基础题】Continue和Break的区别是什么?
答:Continue是中断本次循环,进入一下次的循环
Break是中断整个循环
2.【基础题】while 和do…while循环的区别?
答:While循环先判断条件是否满足再执行,而do…while先执行然后判断条件是否成立。
第五章类、对象、构造
一、名词解释
1.【基础题】OOP:object-oriented programming 面向对象编程,所谓“对象”就是一个
或一组数据以及处理这些数据的方法和过程的集合。面向对象的程序设计完全不同于传统的面向过程程序设计,它大大地降低了软件开发的难度
2.【中等题】OOD:Object Oriented Design面向对象设计将OOA的结果转化成与现实
需求更贴切的系统和对象设计,利用一系列相互协作的软件对象来进行软件设计。3.【中等题】OOA:Object Oriented Analysis面向对象分析评估用户需求和需要解决的
问题。针对用户问题的静态、动态和功能等,输出会提供相应的概念设计。
二、选择
1.【基础题】下列关于构造函数的描述正确的是(C)
A、构造函数可以声明返回类型。
B、构造函数不可以有private修饰
C、构造函数通常与类名相同
D、构造函数不能带参数
2.【基础题】下列哪一个不是类成员是(D)
A、属性
B、数组
C、索引器
D、循环结构
三、填空
1.【基础题】析构函数一个类只有1 个
2.【基础题】一个类有多个构造函数
3.【基础题】构造函数具有与类相同的名称,它通常初始化新对象的数据成员。
四、问答
1.【中等题】方法的签名是指?
答:方法名和该方法的参数列表,类型,大小,位置。
2.【基础题】请简述C#中结构与类的区别?
答:数据类型不同:结构是值类型,值类型在堆栈上分配地址,所有的基类型都是结构类型,类是引用类型,引用类型在堆上分配地址。
继承性:结构不能从另外一个结构或者类继承,本身也不能被继承,类完全可扩展的,除非显示的声明sealed,否则类可以继承其他类和接口,自身也能被继承,虽然结构不能被继承可是结构能够继承接口,方法和类继承接口一样
内部结构:结构没有默认的构造函数,但是可以添加构造函数,没有析构函数,没有abstract 和sealed(因为不能继承) ,不能有protected 修饰符,可以不使用new 初始化,在结构中初始化实例字段是错误的。类有默认的构造函数,有析构函数,可以使用abstract 和sealed,有protected 修饰符,必须使用new 初始化。
第六章访问关键字、命名空间
一、选择
1.【基础题】“访问范围限定于此程序或那些由它所属的类派生的类型”是对以下哪个成
员可访问性含义的正确描述?( B )
A.public B.protected
C.internal D.protected internal
2.【基础题】“访问范围限定于只能在自己本身”是对以下哪个成员可访问性含义的正确
描述( D )
A.public B.protected
C.internal D.private
二、填空
1.【基础题】无返回值的关键字是void
2.【基础题】访问修饰符有public、private 、protected 、internal.
3.【基础题】命名空间实际上是一种组织相关类和其他类型的方法。
4. 【基础题】命名空间是隐式公共的。不能通过指定问修饰符写其访问属性。不能将
命名空间设置为受保护的、私有的或内部的,因此它们只能作为公共的存在
5. 【基础题】引用命名空间的关键字是using 。
三、问答
1.【中等题】静态成员和非静态成员的区别?
答:静态成员用static修饰符声明,在类被实例化时,通过类进行访问,不带有static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过对象进行访问一个类的所有实例的同一静态变量都是一个值,同一个类的不同实例的同一非静态变量可以是不同的值。
2.【基础题】C#访问修饰符有哪些,分别有什么作用?
答:public:访问不受限制。
protected:访问仅限于包含类或从包含类派生的类型。
Internal:访问仅限于当前程序集。
protected internal:访问仅限于当前程序集或从包含类派生的类型。
private:访问仅限于包含类型。
第七章继承
一、选择
1.【基础题】在堆栈上创建对象和调用构造函数时,通常使用(B )关键字
A.Typeof
B.New
C.As
D.is
二、填空
1.【基础题】override即重写是指重写基类的方法(方法的覆盖)。
2.【基础题】override用来重写父类的方法,重载使用相同名的方法或操作符拥有不同类
型的参数
3.【基础题】关键字base 用于派生类的构造函数显示调用基类构造函数
4.【基础题】一个类可以有能力直接从另一个类获得其代码和数据,派生类从基类那里获
得其所有成员的是继承。
5.【基础题】调用基类构造函数,运用base关键字。
6.【基础题】虚方法的关键字是virtual 。
7.【基础题】C#提供virtual关键字,用于将方法定义为支持多态。
8.【基础题】Override 关键字用于重写基类的虚拟方法。
9.【基础题】面向对象的特征有封装继承多态.
三、问答
1.【基础题】C#中类可以实现多继承吗?通过什么方式实现呢?
答:C#中类不能够多继承,必须通过接口实现。
2.【中等题】继承是面向对象编程的一个重要的概念.请简述继承的概念和优点.
答:继承:一个类可以有能力直接从另一个类获得其代码和数据,派生类从基类那里获得其所有成员。
优点:使用继承无需从头开始创建新类,便可以在现有类的基础上添加新方法、属
性和事件(事件是对用户操作)的响应。,既省时又省力。
3.【中等题】说明base关键字、new关键字和override关键字各自的作用。
答:关键字base,用于派生类的构造函数显示调用基类构造函数。
new访问修饰符用于显示隐藏继承自基类的成员,即如果派生的类成员的名称与
基类成员名称相同,new关键字会将派生类成员识别为一个全新的成员。
关键字override用于修改方法,具有override关键字修饰的方法是对基类中同名方法的新实现,
第八章抽象类、接口
一、选择
1.【基础题】下列描述错误的是(D)
A、类不可以多重继承而接口可以
B、抽象类自身可以定义成员而接口不可以
C、抽象类和接口都不能被实例化
D、一个类可以有多个基类和多个基接口
2.【中等题】以上描述错误的是(A)
A.在C++中支持抽象类而在C#中不支持抽象类
B.C++中可在头文件中声明类的成员而在CPP文件中定义类的成员,在C#中没有头
文件并且在同一处声明和定义类的成员
C.在C#中可以使用NEW修饰符显示隐藏从基类继承的成员。
D.在C#中要在派生类中重新定义基类的虚函数必须在前面加上override。
3.【基础题】下列关于接口的描述不正确的是(B)
A.接口描述了组件对外提供的服务,在组件和组件之间,组件和接口之间都是通过接
口进行交互的
B.一个组件可以实现多个接口,而一个特定的组件接口只可以被一个组件来实现
C.接口是组件之间的协议,接口一旦发布,组件发布者就应该尽量保持接口不变,否
则将影响现有系统的运行
D.接口声明实际就是一种定义新的接口的类型的声明。接口使用interface 来定义
4.【基础题】在C#中,多继承通过( B )来实现
A.属性B.接口
C.索引器D.方法
5.【基础题】以下叙述正确的是:(ABC )
A. 接口中可以有虚方法。
B. 一个类可以实现多个接口。
C. 接口不能被实例化。
D. 接口中可以包含已实现的方法。
6.【基础题】虚方法的执行方式可以被派生类改变,这种改变通常通过(A )实现.
A、方法重载
B、构造方法
C、值方法
D、引用型方法
二、填空
1.【基础题】抽象类的关键字是abstract
2.【基础题】密封类的关键字是sealed。
3.【基础题】抽象类的方法可以实现,接口的方法必须实现。
4.【基础题】接口不能被实例化
5.【基础题】类不可以多重继承而接口可以
6.【基础题】抽象类自身可以定义成员而接口不可以
7.【基础题】一个类可以实现多个接口
8.【基础题】虚方法可以在派生类重写,抽象方法必须在每个非抽象的派生类中重写。
9.【基础题】如果Alpha类继承自BETA类,则Alpha类称为派生类,BETA类称
为基类。
10.【中等题】有一个基类Person,一个接口Iteller。类Employee要同时继承类和接口,
则其正确的写法应该是public class Employee : Person,Itrller
11.【基础题】接口是一种引用类型,在接口中可以声明方法、属性、索引器和事件,但不
可以声明公有的域或私有的成员变量。
三、问答
1.【基础题】Sealed修饰符是干什么的?
答:表示密封类,用于类时表明该类不能被继承,不能和abstract同时使用,因为这两
个修饰符在含义上互相排斥,用于方法和属性时,表示该方法或属性不能再被继承,必须和override关键字一起使用,因为使用sealed修饰符的方法或属性肯定是基类中相应的虚成员
2.【基础题】简述抽象类的定义以及在C#编程语言中,抽象类的作用是什么?
答:有时,我们只需要继承某个特定类,但不需要实例化该类的对象。这样的类成为抽象基类。C#允许通过在类中添加abstract关键字来创建抽象基类。
作用: 在抽象基类中,可以指定一个方法而不指定其代码主体。这意味着抽象基类保存着方法的定义,而方法的实际实现则写在派生类中
3.【基础题】声明抽象方法注意一下几点?
答: 1.抽象基类除了抽象方法外,还可以包含已实现的方法。
2.操作需要用abstract关键字来标识。
3.操作的定义始终已分号结束。
第九章属性、索引器、迭代器
一、选择
1.【基础题】下列关于C#索引器理解正确的是(C)
A、索引器的参数必须是两个或两个以上
B、索引器的参数类型必须是整数型
C、索引器没有名字
D、以上皆非
二、填空
1.【基础题】要声明类或结构上的索引器,使用this关键字
2.【基础题】属性是一个或两个代码,表示一个get访问器和/或一个set访问器。
3.【基础题】属性的set 访问器用于将值赋给类的私有实例变
三、问答
1.【基础题】简述属性的定义及其作用?
答:属性是一种用于访问对象或类的特性的成员,停供了数据的封装性和安全
性。
2.【基础题】简述索引器的定义及其作用?
答:索引器是C#的简单组件,使用索引器,可以用索引数组的方式来索引对象,
索引器提供了与数组访问相类似的类成员访问方式。
3.【基础题】简述索引器和属性之间的区别?
答:1 属性通过名称标识。索引器通过签名标识。
2 属性通过简单名称或成员访问来访问。索引器通过元素访问来访问。
3 属性可以为静态成员或实例成员。索引器必须为实例成员。
4 属性的get 访问器没有参数。索引器的get 访问器具有与索引器相同的形参
表。属性的set 访问器包含隐式value 参数。除了value 参数外,索引器的set
访问器还具有与索引器相同的形参表。
4.【中等题】什么是迭代器,运用迭代器有什么好处。
答:迭代器是C# 2.0 中的新功能。迭代器是方法、get 访问器或运算符,它使
能够在类或结构中支持foreach 迭代,而不必实现整个IEnumerable 接口。只
需提供一个迭代器,即可遍历类中的数据结构,它的优点就是可以是实现容器
类和自定义集合的循环。
第十章委托、事件
一、选择
1.【基础题】委托可以()把递给(C)
A、对象和对象
B、对象和方法
C、方法和方法
二、填空
1.【基础题】委托的关键字是delegate 。
2.【基础题】委托的参数和返回类型必须和调用函数一致
3.【基础题】委托本身能够拥有一个签名,当它持有与它的签名相匹配的方法的引用
后,委托就可以和这个方法一样被调用
4.【基础题】定义事件的关键字是event 。
三、问答
1.【基础题】定义一个多路委托有几个步骤
答:定义一个委托类型
编写具有相同签名方法作为委托
创建委托对象,将它绑定到需要通过委托调用的第一个方法
创建另一个委托对象,绑定到下一个需要调用的方法
可用+,-,+=或-=操作符,合并成一个集成的多播委托
2.【基础题】简述创建事件的过程
答:定义事件
给对象预订该事件
将该事件(当它发生时)通知订户
3.【提高题】什么是多播委托?
答:多播委托也是一个委托,它可以调用多个方法,只要这些方法的签名与委托的定义相同。多播委托的概念是委托和事件编程之间的门槛,多播委托是通过对方法的委托进行组合而创建的。组合多个委托,可用+,-,+=或-=操作符。要让一个委托调用多个方法,可以用+或+=操作符为该委托增加方法。要减少一个多播委托持有的方法,可以使用-或-=操作符。
第十一章数组
一、名词解释
1.【基础题】什么是数组?
答:数组是一种数据结构,它包含若干相同类型的变量
二、填空题
1.【基础题】实现数组反转的函数是:Reverse.
2.【基础题】对数组排序的函数是:Sort.
3.【基础题】System.Array 是所有数组类型的抽象基类型
4.【中等题】能用foreach的都实现了接口IEnumerable
5.【基础题】所有数组都是引用类型
三、选择题
1.【基础题】string mystring="My name is ynn.";Console.WriteLine(mystring.Substring( 11,3 ))
的结果是:(B)
A。yn B. ynn C.is D.s y
2.【基础题】double num=
3.1415926.";Console.WriteLine(num.ToString(F3))的结果是:(C)
A。F3 B. 3.14 C.3.142 D.3.141
3.【基础题】double num=3.14;Console.WriteLine(num.ToString(p1))的结果是:(B)
A。p1 B. 31.4% C.31.40% D.3.14%
4.【基础题】DateTime.Now.ToString("yyyyMMddhhmmss")(假如今天的日期是2008-12-22
15:34:50)的结果是(A)
A。20081222153450 B.2008-12-22 15:34:50 C.20081222 D.0812********
四、简答题
1.【基础题】数组包括哪些种类?
答:一维、多维、交错。
2.【基础题】二维数组的Length得到的是?
答:成员个数
3.【基础题】二维数组与交错数组有什么区别?
答:二维数组的每一行成员数相同,交错数组的每一行成员数有可能不同。
4.【基础题】简述常见的数组声明及赋值的方法
方法一:
int[] arr1 = new int[3];
arr1[0]=1;
arr1[2] = 2;
arr1[1] = 3;
方法二:
int arr2 = new int[3] { 1, 2, 3 };
方法三:
int aar3 = new int[] { 1, 2, 3 };
5.【基础题】String和StringBuilder有什么区别
在.NET中String是不可改变对象,一旦创建了一个String对象并为它赋值,它就不可能再改变,也就是你不可能改变一个字符串的值
String类型在做字符串的连接操作时,效率是相当低的,并且由于每做一个连接操作,都会在内存中创建一个新的对象,占用了大量的内存空间。这样就引出StringBuilder 对象,StringBuilder对象在做字符串连接操作时是在原来的字符串上进行修改,改善了性能。
6.【中等题】字符串的比较有几种?分别举例说明
String 类有四种方法:Compare( )、CompareTo( )、CompareOrdinal( )、Equals( )。
Compare( )方法是CompareTo( )方法的静态版本。只要使用“=”运算符,就能使用Equals( )方法,CompareOrdinal( )方法对两个字符串比较不考本地语言与文件。
示例:
int result;
bool bresult;
s1="aaaa";
s2="bbbb";
//Compare( )method
//result值为“0”表示等,小于零表示s1 < s2,大于零表示s1 > s2
result=https://www.wendangku.net/doc/a617371646.html,pare(s1,s2);
result=https://www.wendangku.net/doc/a617371646.html,pareTo( s2 );
result=https://www.wendangku.net/doc/a617371646.html,pareOrdinal(s1,s2);
bresult=s1.Equals( s2 );
bresult=String.Equals( s1,s2 );
7.【基础题】string s = "abcdeabcdeabcde";
string[] sArray = s.Split('c');
foreach (string i in sArray)
Console.WriteLine(i.ToString());
输出的结果是:
ab
deab
deab
de
8.【基础题】请说明foreach的用法
foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组。foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。
此语句的形式如下:
foreach (type identifier in expression) statement
若要循环访问集合,集合必须满足特定的要求。集合类型:
必须是interface、class 或struct。
必须包括返回类型的名为GetEnumerator 的实例方法
9.【基础题】请编程实现一个冒泡排序算法?
答:
int [] array = new int [*] ;
int temp = 0 ;
for (int i = 0 ; i < array.Length - 1 ; i++)
{
for (int j = i + 1 ; j < array.Length ; j++)
{
if (array[j] < array[i])
{
temp = array[i] ;
array[i] = array[j] ;
array[j] = temp ;
}
}
}
10.【基础题】C#中,string str = null 与string str ="",请尽量用文字说明区别。
string str =""初始化对象分配空间而string str=null初始化对象
第十二章集合
一、名词解释
1.【基础题】什么是集合?
答:NET Framework 提供了用于数据存储和检索的专用类。这些类提供对堆栈、队列、列表和哈希表的支持。大多数集合类实现相同的接口,可继承这些接口来创建适应更为专业的数据存储需要的新集合类
二、填空题
1.【基础题】所有集合引用的名称空间是:System.Colliections.
2.【基础题】stack是先进后出,Queue是先进先出。
3.【基础题】Array类的Clear 方法用于将数组中的一系列元素设置
三、选择题
4.【基础题】以下哪个是可以变长的数组?( D )
A.Array
B.string[]
C.string[N]
D.ArrayList
5.【基础题】以下哪个是排序的数据列表: ( A )
A.SortedList
B.HashTable
C.ArrayList
D. Heap
6.【基础题】在.NET中,Hashtable在.NET中,Hashtable类所在的命名空间是( C )
(选择一项)
A.System.Threadint
B.System.IO
C.System.Collections
D.System
四、简答题
1.【基础题】集合类具有哪三个特点?
1)、集合类定义为 System.Collections System.Collections.Generic 命名空间的一部分。
2)、大多数集合类都派生自 ICollection、IComparer、IEnumerable、IList、IDictionary 和 IDictionaryEnumerator 接口以及它们的等效泛型接口。
3)、使用泛型集合类可以提供更高的类型安全性,在某些情况下还可以提供更好的性能,尤其是在存储值类型时,这些优势会体现得更明显。