Visual C# 程序设计复习思考题.docx
《Visual C# 程序设计复习思考题.docx》由会员分享,可在线阅读,更多相关《Visual C# 程序设计复习思考题.docx(137页珍藏版)》请在冰豆网上搜索。
VisualC#程序设计复习思考题
Visualc#程序设计部分
一选择题
(1)类型参数在泛型类中可以用作。
(ABCD)
A.成员字段类型B.成员方法的参数类型
C.成员方法的返回类型D.成员方法代码中的变量类型
(2)设变量t的类型为泛型类中的类型参数,那么下面表达式中不正确的有。
(A)
A.t=nullB.t.Equals(0)C.t.ToString();D.tisT
(3)以下泛型类的定义中不正确的有。
(C)
A.publicclassAwhereT:
new(){}
B.publicclassBwhereT1:
T2{}
C.publicclassCwhereR:
S[],IComparable{}
D.publicclassCwhereR:
S,IComparablewhereS:
IComparable{}
(4)泛型类A的定义如下,那么其派生类定义中不正确的有。
(C)
publicclassAwhereT:
new(){}
A.publicclassB1:
A{}
B.publicclassB2:
A{}
C.publicclassB3:
AwhereS:
new(){}
D.publicclassB:
AwhereS:
AwhereT:
new(){}
(5)设X和Y都是多参数泛型类,那么以下属于封闭类型的有。
(BC)
A.X>B.X>
C.Y>D.Y,S>
(6)设C为一个泛型类,Rel为一个泛型结构,那么下列构造类型中属于值类型的有。
(CD)
A.CB.C>
C.RelD.Rel>
(7)设可空类型的变量X取值为null,那么访问其下列成员会引发异常的有。
(AD)
A.X.ValueB.X.HasValue
C.X.ToString()D.X.GetType()
(8)设bool?
型变量a、b、c的初值分别为true、false和null,那么执行下面的语句后,a、b、c的取值分别为。
(B)
a|=b;b|=c;c|=b;
A.nullnullnullB.truenullnull
C.truenulltrueD.falsefalsefalse
(9)执行完下面的代码后,dt最后的取值为。
(C)
DateTime?
dt=newDateTime?
();
dt=newDateTime?
((dtisDateTime?
newDateTime?
(DateTime.Now):
dt)?
?
DateTime.MaxValue)?
?
DateTime.MinValue;
A.nullB.DateTime.Now
C.DateTime.MaxValueD.DateTime.MinValue
(10)以下泛型定义中不正确的有。
(AC)
A.publicinterfaceIMark:
IComparable,ICollection{}
B.publicinterfaceIMark:
IComparable,ICollection{}
C.publicclassMark:
IDictionary{}
D.publicclassMark:
IComparable,IDictionary{}
(12)根据下面的泛型继承定义,泛型类B需要提供实现的方法有。
(ABCD)
publicinterfaceIA
{
voidF(Ss);
voidG(Ss,Tt);
}
publicabstractclassA:
IA
{
publicabstractvoidF(Tt);
publicabstractvoidG(Ttl,Tt2);
publicabstractvoidH(Ss,Tt);
}
publicclassB:
A,IA
{
...
}
A.publicoverridevoidF(Ss){}B.publicoverridevoidG(Ssl,Ss2){}
C.publicoverridevoidH(Rr,Ss){}D.publicvoidG(Ss,Tt){}
(13)以下有关泛型方法的描述中,正确的有。
(D)
A.泛型方法只能出现在泛型类型中
B.如果泛型类的类型参数被具体化,类中泛型方法的同名类型参数也同时被具体化
classProgram
{
staticvoidMain()
{
Ap=newA();
p.G(67);
}
}
classA
{
publicA(){}
publicvoidG(Ti){}
}
C.同一个类中可以包含多个同名的泛型方法,只要它们的类型参数名不同
D.同一个类中可以包含多个同名的泛型方法,只要它们的类型参数个数不同
(14)对于下面的泛型方法定义,以下调用形式中会失败的有。
(B)
publicclassC
{
publicstaticvoidFA(Ttl,Tt2)whereT:
struct{}
}
A.C.FA(2,3);B.C.FA(2,0.3);
C.C.FA(2,3);D.C.FA(2,0.3);
(15)对于下面的泛型方法定义,以下委托类型定义能够与之匹配的有。
(A)
publicclassC
{
publicstaticvoidFA(Ttl,Tt2)whereT:
struct{}
}
A.publicdelegatevoidDg1(Ttl,Tt2);
B.publicdelegatevoidDg2(Ttl,Tt2)whereT:
class;
C.publicdelegatevoidDg3(Ttl,Tt2)whereT:
IComparable;
D.publicdelegatevoidDg4(Ttl,Tt2)whereT:
C;
(16)以下关于遍历器的说法中,正确的有。
(AD)
A.实现默认遍历器的方法返回类型为IEnumerator或IEnumerator
B.实现非默认遍历器的方法返回类型为IEnumerator或IEnumerator
C.实现默认遍历器的方法可以带有参数
D.实现非默认遍历器的方法可以带有参数
(17)位于哪种状态时,枚举器能够生成遍历元素。
(C)
A.准备(before)B.运行(running)
C.挂起(suspended)D.结束(after)
(18)下面选项中能够捕获运算溢出的异常类型的有。
(D)
A.ExceptionB.SystemException
C.ArithmeticExceptionD.OverflowException
(19)下面的代码段引发而又没有捕获的异常有。
(BCD)
staticvoidMain()
{
try
{
try{thrownewFormatException();}
catch{thrownewArgumentNullException();}
}
catch
{
try{thrownewOverflowException();}
finally{thrownewNullReferenceException();}
}
finally
{
try{thrownewArgumentOutOfRangeException();}
catch{thrownewApplicationException();}
}
}
A.ArgumentNullExceptionB.OverflowException
C.NullReferenceExceptionD.ApplicationException
(20)通过程序拨打手机时,如果手机号码中含有非数字字符应引发C异常,而如果号码是空号应引发B异常。
A.ArithmeticExceptionB.ArgumentException
C.FormatExceptionD.IndexOutOfRangeException
(21)下面的循环一共会被执行次。
(C)
staticvoidMain()
{
inti=0;
while(i<10)
{
try{thrownewOverflowException();}
catch(ArgumentException){i+=2;}
catch(ArithmeticException){i+=4;}
catch(Exception){i+=6;}
finally{i--;}
}
}
A.10B.5C.4D.2
(22)以下类中可以被构造实例的有。
(BD)
A.FileB.FileInfoC.DirectoryD.Directorylnfo
(23)使用File类的下列方法打开文件时,如果指定文件不存在时不会引发异常的有。
(AB)
A.AppendAllTextB.AppendText
C.OpenReadD.OpenWrite
(24)在向流中写入数据时,StreamWriter对象的默认字符编码格式为。
(C)
A.ASCIIB.UTF-7C.UTF-8D.Unicode
(25)下面类型中可以定义为分部类型的有。
(ABC)
A.类B.结构C.接口D.委托
(26)下面哪些是合法的预处理器指令。
(BC)
A.#defB.#ifC.#elseD.#elseif
(27)C#程序中,可使用try..catch机制来处理程序出现的______错误.(B)
A.语法B.运行C.逻辑D.拼写
(28)C#中,在方法MyFunc内部的try..catch语句中,如果在try代码块中发生异常,并且在当前的所有catch块中都没有找到合适的catch块,则。
(C)
A..NET运行时忽略该异常
B..NET运行时马上强制退出该程序
C..NET运行时继续在MyFunc的调用堆栈中查找提供该异常处理的过程
D..NET抛出一个新的”异常处理未找到”的异常
(29)下列语句创建了多少个string对象?
(A)
string[,]strArray=newstring[3,4];
A.0B.3C.4D.12
(30)接口IAnimal定义如下:
publicinterfaceIAnimal{voidMove();}
则下列抽象类的定义中,哪些是不合法的?
(CD)//显式接口成员实现本身不能是抽象的和虚拟的
A.abstractclassCat:
IAnimal{abstractpublicvoidMove();}
B.abstractclassCat:
IAnimal{
virtualpublicvoidMove(){Console.Write("Move!
");}
}
C.abstractclassCat:
IAnimal{
abstractpublicvoidIAnimal.Move();}
}
D.abstractclassCat:
IAnimal{
publicvirtualvoidIAnimal.Move(){Console.Write("Eat!
");}
}
(31)在使用FileStream打开一个文件时,通过使用FileMode枚举类型的_________成员,来指定操作系统打开一个现有文件并把文件读写指针定位在文件尾部.(A)
A.AppendB.CreateC.CreateNewD.Truncate
(32)在C#中,预处理器指令#region和#endregion的作用是:
.(B)
A.注释#region和#endregion之间的代码
B.为CodeEditor定义一段可折叠代码区
C.#region和#endregion之间的代码在Debug版本中不参加编译
D.#region和#endregion之间的代码在Release版本中不参加编译
(33)用鼠标右击一个控件时出现的菜单一般称为:
.(C)
A.主菜单B.菜单项C.快捷菜单D.子菜单
(34)C#程序中,下列哪些预处理指令用于条件编译?
(A)
A.#ifB.#ifdefC.#RegionD.#error
(35)关于线程和进程,下列说法哪些是正确的?
(AD)
A.线程是操作系统分配处理器时间的基本单位;
B.进程是操作系统分配处理器时间的基本单位;
C.一个线程可以属于多个进程;
D.一个进程可以有多个线程;
(36)为从标准文本文件(如:
readme,txt)中读取信息行,应使用操作文件.(C)
A.XmltextReaderB.XmlReaderC.TextReaderD.StreamReader
(37)通过继承类,用户可以创建自己的异常类.(C)
A.System.ExceptionB.System.SystemException
C.System.ApplicationExceptionD.System.UserException
(38)泛型类Gen的声明如下,构造类Gen的字段a的类型为。
(A)
classGen
{
publicT[,]a;
}
A.int[,][]B.int[][,]C.int[,]D.int[]
(39)下面有关事件的说法,不正确的有。
(B)
A.delegate是所有事件的元类型
B.事件应当被定义为public,否则就不能被外部对象引发
C.一个事件可以关联多个事件处理方法
D.多个事件可以使用一个事件处理方法
(40)接口中定义的方法,不能使用的修饰符有。
(ABD)
A.publicB.abstractC.newD.static
(41)下面是关于try语句组成的描述,正确的有。
(ABC)
Atry块包含正被异常保护的代码;
Bcatch子句部分含有一个或多个catch子句,这些是处理异常的代码块,它们也称为是异常处理程序,
Cfinally块含有在所有情况下都要被执行的代码,无论有没有异常发生。
(42)下面是关于一般catch子句的描述,正确的有。
(ABCD)
A在catch关键字之后没有参数列表;
B匹配try块中引起的任何类型的异常;
C但不能确定引发异常的类型;
D只允许对任何可能发生的异常的普通处理和清理。
(43)下面是关于带对象的特定catch子句的描述,正确的有。
(ABC)
A在异常类名称之后包括一个标识符;
B该标识符在catch子句块中相当于一个本地变量,并被称为异常变量;
C异常变量引用异常对象,并能被用于访问关于该变量的信息。
(44)下面是关于委托实例的描述,正确的有。
(ABCD)
A委托(delegate)实例可以认为是这样的对象,它包含具有相同签名和返回值类型的有序方法列表,该方法的列表称为调用列表(invocationlist);
B当委托实例被调用时,它调用列表中的每一个方法;
C由委托实例保存的方法可以来自任何类或结构,只要它们同时匹配委托的返回值和签名(包括ref和out修饰符);
D调用列表中的方法可以是实例方法,也可以是静态方法。
(45)下面是关于委托类型的描述,正确的有。
(ABCD)
A委托是类型,委托类型必须在被用来创建变量以及类型的实例之前声明;
B委托类型声明和所有类型声明一样,不需要在类的内部声明;
C委托类型的声明看上去与方法的声明很相似,有返回类型和签名,返回类型和签名指定了委托接受的方法的形式;
D委托类型的声明以delegate关键词开头,没有方法主体。
(46)下面是关于创建委托对象的描述,正确的有。
(ABCD)
A委托是引用类型,因此有引用和对象,在委托类型声明之后,可以声明变量并创建类型的对象;
B可以使用带new运算符的对象创建表达式来创建委托对象,new运算符的操作数由委托类型名和一组圆括号(包含作为调用列表中第一个成员的方法的名字)组成;
C可以使用快捷语法来创建委托对象,它仅由方法说明符构成,之所以能使用快捷语法是因为在方法名称和其相应的委托类型之间有隐式转换;
D除了为委托分配内存,创建委托对象还会把第一个方法放入委托的调用列表。
(47)下面是关于委托对象操作的描述,正确的有。
(ABCDE)
A由于委托是引用类型,我们可以通过给它赋值来改变包含在委托变量中的引用,旧的委托对象会被垃圾回收器回收;
B委托对象可以使用“+”运算符来“组合”,这个运算最终会创建一个新的委托对象,其调用列表是两个操作数的委托调用列表的副本的组合;
C尽管术语组合委托(combiningdelegate)让我们觉得好像操作数委托对象被修改了,其实它们并没有被修改,委托对象是恒定的,委托对象被创建后不会再被改变;
D我们可以通过使用+=运算符来为委托对象增加新的方法或另一个委托对象;
E我们还可以使用-=运算符从委托对象调用列表中移除方法或一个委托对象。
(48)下面是关于委托对象调用的描述,正确的有。
(ABCDE)
A可以像调用方法一样简单地调用委托对象;
B用于调用委托对象的参数将会用于调用列表中的每一个方法(输出参数例外);
C一个方法可以在调用列表中出现多次,当委托对象被调用时,每次在列表中遇到这个方法时它都会被调用一次;
D如果委托有返回值并且在调用列表中有一个以上的方法,调用列表中最后一个方法返回的值就是委托调用返回的值,调用列表中所有其他方法的返回值都会被忽略;
E如果委托有引用参数,参数值会根据调用列表中的一个或多个方法的返回值而改变,在调用委托列表中的下一个方法时,参数的新值(不是初始值)会传给下一个方法。
(49)下面是关于匿名方法的描述,正确的有。
(ABCD)
A可以使用匿名方法(anonymousmethod)来初始化委托对象,匿名方法是在初始化委托时内联(inline)声明的方法;
B匿名方法可以用在声明委托变量时作为初始化表达式;
C匿名方法可以用在组合委托对象时在赋值语句的右边;
D匿名方法可以用在为事件增加处理程序时在赋值语句的右边。
(50)下面是关于匿名方法的描述,正确的有。
(ABCD)
A匿名方法表达式的语法由delegate类型关键字、参数列表(如果语句块没有使用任何参数则可以省略)、语句块(它包含了匿名方法的代码)组成;
B匿名方法不会显式声明返回值,然而,实现代码本身的行为必须通过返回一个在类型上与委托的返回类型相同的值来匹配委托的返回类型,如果委托有void类型的返回值,匿名方法就不能返回值;
C在委托的参数列表不包含任何out参数和匿名方法不使用任何参数的情况下,我们可以通过使圆括号为空或省略圆括号来简化匿名方法的参数列表;
D如果委托声明的参数列表包含了params参数,那么params关键字就会被匿名方法的参数列表忽略。
(51)下面是关于匿名方法使用外围作用域的变量的描述,正确的有。
(ABCD)
A匿名方法可以访问它们外围作用域的局部变量和环境;
B外围作用域的变量叫做外部变量(outervariable);
C用在匿名方法实现代码中的外部变量称为被方法捕获(captured)变量;
D只要匿名方法还是委托对象的一部分,即使外部变量已经离开了作用域,被捕获的外部变量也会一直有效。
(52)下面是关于lambda表达式的描述,正确的有。
(ABCD)
A编译器可以从委托的声明中知道委托参数的类型,因此lambda表达式允许我们省略参数的类型;
B带有类型的参数列表称为显式类型参数;
C省略类型的参数列表称为隐式类型参数;
D如果只有一个隐式类型参数,我们可以省略周围的圆括号。
(53)下面是关于lambda表达式参数列表的描述,正确的有。
(ABCD)
Alambda表达式参数列表中的参数必须在参数数量、类型和位置上与委托相匹配;
B表达式的参数列表中的参数不一定需要包含类型(如隐式类型),除非委托有ref或out参数——此时类型是必须的(如显式类型);
C如果只有一个参数,并且是隐式类型的,周围的圆括号可以被省略,否则它就是必须的;
D如果没有参数,必须使用一组空的圆括号。
(54)下面是关于事件的描述,正确的有。
(ABCD)
A事件的很多方面和委托相似,事件就好像被简化的针对特殊用途的委托对象,注册到事件上的方法会在事件触发时被调用;
B发布者(publisher):
让事件被其他类或结构可见并使用的类或结构;
C订阅者(subscriber):
把事件和发布者关联注册的类或结构;
D事件处理程序(eventhandler):
注册到事件的方法,可以在事件所在的类或结构中,或者在不同的类或结构中。
(55)下面是关于事件私有委托对象的描述,正确的有。
(ABCD)
A事件包含了一个私有的委托对象;
B事件提供了对它控制的私有委托对象的结构化访问;
C与委托对象中的其他操作不一样,对于事件我们只可以添加、删除或调用事件处理程序;
D事件被触发时,它使用委托对象来依次调用调用列表中的方法。
(56)下面是关于事件创建及使用的描述,正确的有。
(ABCDE)
A委托类型声明--事件和事件处理程序必须有共同的签名和返回类型,它们通过委托类型声明进行描述;
B事件处理程序声明--这些在订阅者类中的方法(事件处理程序)声明会在事件触发时被执行,它们不需要有独立的方法,它们可以是匿名方法或lambda表达式;
C事件声明--事件发布者类中的声明,用来保存并调用事件处理程序;
D事件注册--这段代码把事件处理程序添加到事件中;
E触发事件的代码--发布者类中的这段代码,用来调用事件处理程序。
(57)下面是关于事件声明的描述,正确的有。
(ABCD)
A发布者类必须提供事件和触发事件的代码;
B创建事件比较简单—