NET复习题Word文档格式.docx
《NET复习题Word文档格式.docx》由会员分享,可在线阅读,更多相关《NET复习题Word文档格式.docx(24页珍藏版)》请在冰点文库上搜索。
A.intNum=int.Parse(str);
B.intNum=str.Parse(int);
C.intNum=(int)str;
D.intNum=str.ToInt();
对于不同的流,可以使用(a)属性来查询流是否支持查找操作。
A.CanSeekB.PositionC.CanReadD.CanWrite
下列Stream类中,(a)类用来向其他流提供缓冲区读写支持。
A.BufferedStreamB.MemoryStreamC.FileStreamD.CryptoStream
下列哪个Stream类不存在于System.IO命名空间中?
A.FileStreamB.MemoryStreamC.BufferedStreamD.NetWorkStream
在托管环境中创建线程后、调用start之前,该线程处于(a)状态。
A.UnstartedB.RunningC.WaitSleepJoinD.Stopped
为了设置线程t1的执行优先级,需访问t1的(a)属性。
A.PriorityB.IsAliveC.IsBackgroudD.ThreadState
x,y都是类MyClass的变量。
为了测试这两个变量是否引用同一个对象,应使用类MyClass的
下列哪个方法进行判断?
(c)
A.GetHashCodeB.EqualsC.ReferenceEqualsD.ToString
若程序集MyWork.dll的配置文件存在,则应起名为(a)。
A.MyWork.dll.configB.MyWork.configC.Config.sysD.Config.info
.NET程序集的配置文件使用(c)格式书写。
A.VB源程序B.C#源程序C.XMLD.HTML
下列哪个数据类型在从托管代码环境传送到非托管代码环境时,不需要使用Interop封送拆收
器进行特殊处理?
(b)
A.System.BooleanB.System.ByteC.System.CharD.System.String
在webServer中,属性是(a)符号表示的
A.[]B.{}C.()D.””
关于.NET中使用Attribute属性,以下除____外全部错误。
A.Attribute是类中的成员B.Attribute只在Main方法内使用
C.Attribute写在中括号内D.Attribute是MSIL的一部分
已知intn=100;
以下语句中只有_____执行了“装箱”。
A:
intk=n;
B:
objecto=n;
C:
n=200;
D:
strings=n.ToString();
如果要对一个集合以foreach方式执行遍历,则该集合所属的类型至少要实现_____接口。
CollectionBaseB:
ICloneableC:
IEnumerableD:
List<
string>
假定当前程序中对象myobj是被有效引用的第二代对象。
此时若执行GC.Collect(),并在随后立即
调用方法GC.GetGeneration(myobj),其返回值等于____。
0B:
3C:
1D:
2
简答题
1.哈希表有什么用途?
.NET环境下如何使用哈希表?
答:
哈希表是一种很有用的但是也是相对复杂的数据结构。
在哈希表集合的每一个元素中都是以键、值对的形式保存数据的。
其中,键和值都是字符串,这些都是存在内存中的。
由于使用独特的地址算法,对其插入,查找和其他的操作的速度都很快,在数据量较大的情形下之一点更明显。
哈希表的查找方式主要为通过已知的键找出其对应的值。
、NET的Hashtable实现了哈希表。
2.什么是MSIL?
.NET环境下如何产生MSIL的代码?
MSIL即微软的中间语言,它与编程语言无关。
MSIL和元数据都存储在标准的Windows可移植可执行文件中。
此文件可以是DLL和EXE文件。
基于CLR的高级编程语言编写的源代码在编译时,将生成两种内容:
以MSIL表示的指令和元数据。
3.什么是.NET环境下的自动“垃圾回收”?
简述“垃圾回收”所采用的策略。
、NET下收集废弃的内存空间使其重新可用的过程成为垃圾回收。
垃圾回收工作是在、NET下自动执行的。
CLR垃圾回收器首先检查终于最新的一代的对象,回收由垃圾所占有的任何空间。
、NET判断每个对象可以当作垃圾被回收的依据就是不再存在对该对象的有效引用。
GC是、NET框架提供的用于管理垃圾回收的一个类。
3.什么是事件?
事件与委托有什么关系?
委托用来处理在某些编程语言中需要用到函数指针来处理的情况。
事件是一个类通知另一个类的一种途径。
、NET中的事件是一种特殊的委托,这种委托没有返回值,也不允许在其所属的类的外部被调用。
普通的委托是即可以在内部也可在外部被调用的。
4.Web服务是什么?
它有哪些特点?
Web服务是一套崭新的技术标准,定义了应用程序如何在web上实现互操作性。
Web服务的标准是建立在以XML为主的,开发的web规范技术基础上,因此与上一代的对象技术相比具有更好的开放性,是建立客户操作的分布式程序的新平台。
特点:
(1)良好的封装性
(2)松散耦合(3)使用标准协议规范(4)高度可集成能力(5)可跨越通信的防火墙
与WebServer有关的协有什么?
(1)SOAP用于提供标准的RPC方法调用Web服务。
(2)WSDL是基于XML的用于定义Web服务的接口即方法名、参数和返回值等有关的属性的语言。
(3)UDDI用于在网上查找Web服务。
6.什么是线程?
一个.NET应用程序中包含几个线程?
线程是一个执行单元。
每一个进程至少要包含一个线程。
什么是线程池,使用线程池有什么优点?
线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。
线程池线程都是后台线程。
每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。
每个进程仅具有一个用于执行各种方法的线程池,由ThreadPool类管理一组在线程池中运行的线程。
由于不需要在每次启动线程时都进行资源分配,因此会提高性能。
有些情况下不适合使用线程池,例如:
1)需要在前台运行的线程2)需要线程具有特定的优先级3)线程中含有会引起一段时间阻塞的任务4)需要将某些线程放置在单线程的单元中5)需要有与线程关联的稳定的标识,或需要将某个线程专用于某个任务6)需要根据运行情况,动态的对线程进行干涉和控制。
什么情况下使用线程池?
在需要使用大量短命线程的情况下,CLR分配内存及创建线程所花费的时间可能会降低应用程序的整体性能。
在这些情况下,可以使用ThreadPool类。
在无需对每个独立的线程进行完全控制的情况下,也可以使用该类。
7.什么是装箱和拆箱?
它们的实质是什么?
答:
装箱是将值类型转换为引用类型。
拆箱是将引用类型转换为值类型。
在装箱时,系统会先从堆中配置一块内存,然后将值类型数据复制到这块内存,最后再使用引用类型数据指向这块内存。
拆箱过程与之相反。
8.Directory类DirectoryInfo类各有什么特点?
你认为哪个比较好用?
Directory类没有属性,他的方法都是静态方法。
并且该类不能被继承。
DirectoryInfo类的基类是抽象类FileSystemInfo。
DirectoryInfo类是有属性的。
实际使用中DirectoryInfo类比Directory类更常用。
9.什么是泛型?
泛型有什么用?
泛型是、NET中特有的类型,定义泛型用list<
。
>
语句表示。
泛型是具有占位符(类型参数)的类、结构、接口和方法,这些占位符是累、结构、接口和方法所存储或使用的一个或多个类型的占位符。
泛型的作用就是提高代码的重用性,避免强制类型转换,减少装箱和拆箱,提高性能,减少错误。
代码参考。
1》垃圾回收
usingSystem;
namespaceGCCollectIntExample
{
classMyGCCollectClass
{
privateconstlongmaxGarbage=1000;
staticvoidMain()
MyGCCollectClassmyGCCol=newMyGCCollectClass();
Console.WriteLine("
Thehighestgenerationis{0}"
GC.MaxGeneration);
//显示系统支持的当前的代数
myGCCol.MakeSomeGarbage();
//调用这个方法制造一些内存垃圾
Generation:
{0}"
GC.GetGeneration(myGCCol));
//显示myGCCol对象的代数
TotalMenory:
GC.GetTotalMemory(false));
//显示程序当前占用的内存数量
GC.Collect(0);
//执行一次只针对第0带对象的垃圾回收
GC.GetGeneration(myGCCol));
GC.GetTotalMemory(false));
//再次显示myGCol对象当前代数以及该程序占用内存数量
GC.Collect
(2);
//执行一次只针对第2代对象的垃圾回收
//再一次显示没有GCCol对象当前代数以及该程序占用内存数量
Console.Read();
}
privatevoidMakeSomeGarbage()//该方法故意制造一些内存垃圾
Versionvt;
for(inti=0;
i<
maxGarbage;
i++)
vt=newVersion();
//所创建的对象并未被持续引用,因此充斥在内存中成为垃圾
}
2》委托与事件
delegatevoidD(intx);
classC{
publicstaticvoidF1(inti)
Console.WriteLine("
C.F1:
"
+i);
publicstaticvoidF2(inti)
C.F2:
publicvoidF3(inti)
C.F3:
classTest
staticvoidMain()
Dd1=newD(C.F1);
d1
(1);
Dd2=newD(C.F2);
d1
(2);
Dd3=d1+d2;
d3(3);
d3+=d1;
d3(4);
Cc=newC();
Dd4=newD(c.F3);
d3+=d4;
d3(5);
d3-=d1;
d3(6);
d3-=d4;
d3(7);
d3-=d2;
d3(8);
d3(9);
Console.ReadLine();
结果
3》线程同步技术综合应用。
(1)请参考【例4-4】、【例4-5】等例题,建立C#的控制台应用程序。
(2)该程序应完成子任务A、B、C、D、E、F、G。
这些子任务之间存在的前趋关系如图1所示。
(3)为了提高运行效率,要求该程序使用多线程技术,除主线程外,另加入一至二个分线程(一般不要使用线程池)。
这些多线程之间需要适当进行同步性控制,以满足图1中规定的关系。
请在程序中适当使用Thread类的Join方法或AutoResetEvent类对象WaitOne方法解决这里的同步性要求。
并且当用Join方法能解决问题时就不用WaitOne或少用WaitOne方法。
注:
为了突出重点,可将子任务A、B、C、D、E、F、G分别以简单输出语句代替,如Console.WriteLine(“A”);
等。
图1
usingSystem.Threading;
namespace线程池
classProgram
staticAutoResetEventautoEvent=newAutoResetEvent(false);
staticvoidMain(string[]args)
ThreadthreadA=newThread(newThreadStart(Work1));
ThreadthreadB=newThread(newThreadStart(Work2));
A"
);
threadA.Start();
threadB.Start();
autoEvent.WaitOne();
threadA.Join();
D"
threadB.Join();
G"
Console.ReadLine();
staticvoidWork1()
B"
C"
staticvoidWork2()
E"
autoEvent.Set();
F"
}
4》文件的监听
usingSystem;
usingSystem.IO;
publicclassFileSystemWatchCherDemo{
staticvoidMain(string[]args){
FileSystemWatcherwatcher=newFileSystemWatcher(@"
C:
\"
watcher.NotifyFilter=NotifyFilters.LastAccess|NotifyFilters.LastWrite
|NotifyFilters.FileName|NotifyFilters.DirectoryName;
watcher.Created+=newFileSystemEventHandler(OnChanged);
watcher.Deleted+=newFileSystemEventHandler(OnChanged);
watcher.Renamed+=newRenamedEventHandler(OnRenamed);
watcher.Error+=newErrorEventHandler(OnError);
watcher.EnableRaisingEvents=true;
Press‘Enter’toexit…"
privatestaticvoidOnRenamed(objectsource,RenamedEventArgse){
WatcherChangeTypeschangeType=e.ChangeType;
Thefile{0}{2}to{1}"
e.OldFullPath,
e.FullPath,e.changeType.ToString());
privatestaticvoidOnChanged(objectsource,FileSystemEventArgse){
Thefile{0}{1}"
e.FullPath,e.ChangeType.ToString());
privatestaticvoidOnError(objectsource,ErrorEventArgse){
Anerrorhasoccurred"
5》IEnumerable接口的实现
usingSystem.Collections;
usingSystem.Linq;
usingSystem.Text;
namespace_3_10
publicclassContractor
//此处定义Contractor类,他的实例将作为此后定义的Contractors集合类型中的元素
privatestringname;
privateintrate;
publicContractor(StringName,intRate)
this.name=Name;
this.rate=Rate;
publicoverridestringToString()//重载ToString方法以便格式化输出
returnstring.Format("
{0}[${1:
.00}]"
this.name,this.rate);
publicclassContractors:
IEnumerable
privateArrayListAL=newArrayList();
publicIEnumeratorGetEnumerator()//IEnumberable接口中规定要实现的方法
for(intindex=0;
index<
this.Count;
index++)
yieldreturnthis[index];
//yieldreturn使得可以多次返回值
publicintAdd(stringName,intRate)
returnAL.Add(newContractor(Name,Rate));
publicContractorthis[intIndex]
{//允许在实例名之后带有索引的中括号访问Items中的成员
get{return(Contractor)AL[Index];
publicintCount//Count被定义为属性
get{returnAL.Count;
ContractorsmyC=newContractors();
myC.Add("
ThomasAndersen"
12);
CarolePoland"
25);
NancyAndersen"
65);
SideneyHiga"
48);
foreach(ContractorcinmyC)//foreach循环遍历
Console.WriteLine(c);
//writeline调用自定义的ToString方法实现特殊输出格式
myC.Count;
i++)//支持索引器访问
Console.WriteLine(myC[i]);
6》Sockets的实现
usingSys