面向对象程序设计习题.docx
25页第6章面向对象程序设计・选择题1.下面有关类和对象的说法中,不正确的是【A)类是系统提供的一种数据类型C)类和对象的关系是抽象和具体的关系体的类2.面向对象的特点主要概括为【】A)可分解性、可组合型性和可分类性C)封装性、易维护性、可扩展性和可通用性3.要使一个类能被同一命名空间中的其他类访问,但不能被这个命名空间以外的类访问,该类可以【】B)对象是类的实例D)任何一个对象只能属于一个具B)继承性、封装性和多态性D)抽象性、继承性和封装性但不能被这个命名空间以外的类访问,A)不使用任何修饰符B)使用private修饰符C)使用public修饰符D)使用internal修饰符4.在C#中,【】访问修饰符修饰的字段只能由当前程序集访问C) protected D) internalC) protected D) internalB) 一个类只能有一个构造函数D) 用户可以定义无参构造函数B) 构造函数不可以重载D) 构造函数可以声明返回类型B) 构造函数可以重载D) 可以指定构造函数的返回值类A)privateB)public5.类的字段和方法的默认访问修饰符是【】A)publicB)private6.下列关于构造函数的描述中,不正确的是【A)构造函数中,不可以包含return语句C)实例构造函数在生成类实例时被自动调用7.下列关于构造函数的描述中,【】是正确的。
A)构造函数名必须与类名相同C)构造函数不能带参数8.下列的【】不是构造函数的特征A)构造函数的函数名与类名相同C)构造函数可以带有参数9.类ClassA有一个名为M1的方法,在程序中有如下一段代码,假设该段代码是可以执行的,则声明M1方法时一定使用了【】修饰符ClassAAobj=newClassA();ClassA.M1();A)publicB)publicstaticC)privateD)virtual10 .在C#中,从属性的读写特性上来进行分类,可以划分为以下3种,除了【】A)只读属性B)只写属性C)读写属性D)不可读不可写属性11 .在C#中,以下关于属性的描述中正确的是【】A) 属性是以public关键字修饰的字段,以public关键字修饰的字段也可称为属性B) 属性是访问字段值的一种灵活机制,属性更好地实现了数据的封装和隐藏C) 要定义只读属性只需在属性名前加上readonly关键字D) C#的类中不能自定义属性12.以下类MyClass的属性count属于【】属性classMyClass{inti;intcount{get{returni;}}}D) 不可读不可A)只读B)只写属性C)读写13 .C#中的TestClass为一自定义类,其中有如下属性定义:publicintProperty{}使用以下语句创建了该类的对象,并让变量obj引用该对象。
TestClassobj=newTestClass();那么,可通过【】方式访问类TestClass的Property属性A)MyClass.PropertyB)obj.PropertyC)TestClass.PropertyD)obj.Property()14 .关于C#语言的方法,下列叙述正确的是【】A) 方法的定义不能嵌套,但方法的调用可以嵌套B) 方法的定义可以嵌套,但方法的调用不能嵌套C) 方法的定义和调用都不能嵌套D) 方法的定义和调用都可以嵌套15.以下所列的各方法头部中,正确的是【】A)voidplay(vara:Integer,varb:Integer)B)voidplay(inta,b)C) voidplay(inta,intb)D)Subplay(aasinteger,basinteger)16.在类A中定义了属性y:classA{publicinty{get{return1;}set{}}}并试图通过下列代码来实现对属性y的访问Ab=newA();b.y=2;intx=b.y;对此,下列说法正确的是【】A)属性y可读可写,因此变量x的值为2B)属性y可读,但不可写,因此语句“b.y=2;是错误的C)属性y可写,但不可读,因此语句“intx=b.y;是错误的D) 属性y可读可写,变量x的值为117.有以下类声明publicclassClass1{privatestring_sData="OK!";privarestringsData{set{_sData=value;}}}在Main函数中,在成功创建该类的对象obj后,以下【】语句是合法的。
A) obj. _sData="Hello!"B) obj. set(obj.sData);C)obj.sData="Hello!"D)Console.WriteLine(obj.sData);18.在类的定义中,类的【】描述了该类的对象的行为特征A)字段B)方C)属性D)类名19.调用重载方时,系统根据【】来选择具体的方A)参数的类型B)参数的个数和类型C)参数个数D)方的返回值类型20.下列关于方重载的说中,完全正确的是【】A)重载方的参数个数必须不同B)重载方必须具有不同的形参列表C)重载方必须具有不同的返回值类型D)重载方的参数类型必须不同21.关于静态成员,下列说正确的是【】A) 同一个类中的静态成员,类实例化后,在不同的对象中形成不同的静态成员B) 在类实例化后,同类型的对象都共享类的静态成员,静态成员只有一个版本C) 在类定义时静态成员属于类,在类实例化后静态成员属于对象D) 在类实例化后静态成员已被实例化,因此不同的对象有不同的静态成员22.下列关于静态方的说,错误的是【】A) 静态方不对特定实例进行操作,不与实例相关联B) 使用静态方的语格式:类名.静态方(实参列表)C) 静态方只能访问类中的静态成员,不能访问非静态成员D) 静态方不能访问类中的静态成员23.已知:inta=100;voidFunc(refintb){}则下列函数调用正确的是【】。
A)Func(ref(10*a))B)Func(ref10*a)C)Func(ref(a))D)Func(refa)24.下面对方中的ref和out参数说明错误的是【】A) ref和out参数传递方相同,都是把实参的内存地址传递给形参,实参与形参指向同一个内存存储区域,但ref要求实参必须在调用之前明确赋过值B) ref是将实参传入形参,out只能用于从方中传出值,而不能从方调用处接受实参数据C)ref和out参数因为传递的是实参的地址,所以要求实参和形参的数据类型必须一致D)ref和out参数要求实参和形参的数据类型或者一致,或者实参能被隐式地转化为形参的类型25.设方Max的签名为:publicvoidMax(outintmax,paramsint[]a),maxval是一个int型的值类型变量,arrayA是一个int型的数组对象,则下列调用该方的语句中有错的是【】A)Max(maxval,4,5,3)B)Max(outmaxval,4,5,3)C) Max(outmaxval,arrayA)D)Max(outmaxval,4,5)26.有以下类声明:classClass1{publicstaticintCount=0;publicClass1(){Count++;}}在执行以下语句后,Classl.Count的值是【】。
Class1o1=newClass1();Class1o2=newClass1();A)1B)2C)3D)027.在类MyClass中有下列方法定义publicvoidtest(paramsint[]arr){Console.Write("使用params参数!");}publicvoidtest(intx,inty){Console.Write("使用两个整形参数!");}请问上述方法重载有无二义性?若没有,则下列语句的输出为【】Myclassx=newMyClass();x.test(0);x.test(0,1);x.test(0,1,2);A) 有语义二义性B) 使用params参数!使用params参数!使用params参数!C)使用params参数!使用两个整形参数!使用params参数!D)使用params参数!使用两个整形参数!使用两个整形参数!28 .分析以下C#语句,注意类MyClass没有访问修饰符若必须为类MyClass添加访问修饰符,并使MyClass的可访问域保持不变,则应选择【】namespacetest{classMyClass{inti;}}A)privateB)publicC)protectedD)internal29 .C#中MyClass为一个自定义类,其中有以下方法定义:publicvoidHello(){•}•••・并使用以下语句创建了该类的对象obj,则可以访问类MyClass的Hello方法的语句是【】。
MyClassobj=newMyClass()A)obj.Hello()B)obj:Hello()C)MyClass.HelloD)MyClass:Hello30.下列的关键字中可用于引用类的当前实例的是【】A)baseB)thisC)newD)override31.在C#中,以下有关索引器的参数个数的说法中正确的是【】32.委托声明的关键字是【A) 索引器只能有一个参数C) 索引器可以没有参数委托声明的关键字是【B) 索引器可以有多个参数D) 索引器至少要有两个参数A) delegate B) sealed33.以下语句的作用是【 】C) operator D) eventpublic delegate void Hello(string s);A) 声明了一个名称为 Hello 的全局方法C) 声明了一个名称为 Hello 的函数指针B) 声明了一个名称为D) 声明了一个名称为Hello 的函数原型Hello 的委托类型34.有声明语句delegatevoidTimeDelegate(strings),则以下可以和委托TimeDelegate绑定的方法是【A) void f(){ }C) void f(string a){ }B) string f(){ }D) string f(string a){ }35.声明一个委托类型:publicdelegateintmyCallBack(intx);则以下可以和委托myCallBack绑定的方法是【A)voidmyCallBack(intx);B)intreceive(intnum);C)stringreceive(intx);D)不确定的36.有以下部分C#代码,其中MyDelegate是一个【】。
staticvoidfun(strings){Console.WriteLine(s);}publicstaticvoidMain(){MyDelegatep=newMyDelegate(fun);p("Hello!");}D) 类名A)结构类型;B)委托类型C)函数37.对于下面声明的委托和定义的类:。





