C#面向对象编程习题.docx

上传人:b****6 文档编号:7742616 上传时间:2023-01-26 格式:DOCX 页数:22 大小:22.93KB
下载 相关 举报
C#面向对象编程习题.docx_第1页
第1页 / 共22页
C#面向对象编程习题.docx_第2页
第2页 / 共22页
C#面向对象编程习题.docx_第3页
第3页 / 共22页
C#面向对象编程习题.docx_第4页
第4页 / 共22页
C#面向对象编程习题.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

C#面向对象编程习题.docx

《C#面向对象编程习题.docx》由会员分享,可在线阅读,更多相关《C#面向对象编程习题.docx(22页珍藏版)》请在冰豆网上搜索。

C#面向对象编程习题.docx

C#面向对象编程习题

C#面向对象编程-多态

1.c#中的方法重写使用关键字()。

a)override

b)overload

c)static

d)inherit

2.以下的C#代码,试图用来定义一个接口:

publicinterfaceIFile{

intA;

intdelFile(){

A=3;

}

voiddisFile();

}

关于以上的代码,以下描述错误的是()。

(选择一项)

a)以上的代码中存在的错误包括:

不能在接口中定义变量,所以intA代码行将出现错误

b)以上的代码中存在的错误包括:

接口方法delFile是不允许实现的,所以不能编写具体的

实现函数

c)代码voiddisFile();定义无错误,接口可以没有返回值

d)代码voiddisFile();应该编写为voiddisFile(){};

3.在C#中,接口与抽象基类的区别在于()。

a)抽象基类可以包含非抽象方法,而接口只能包含抽象方法

b)抽象基类可以被实例化,而接口不能被实例化

c)抽象基类不能被实例化,而接口可以被实例化

d)抽象基类就是接口,它们之间无差别

4•在开发某图书馆的图书信息管理系统的过程中,开始为教材类图书建立一个TextBook

类;现在又增加了杂志类图书,于是需要改变设计,则下面最好的设计应该是()。

a)建立一个新的杂志类Journal。

b)建立一个新的杂志类Journal,并继承TextBoook类。

c)建立一个基类Book和一个新的杂志类Journal,并让Journal类和TextBoook类都继承于Book类。

d)不建立任何类,把杂志图书的某些特殊属性加到TextBoook类中。

5•可以使用()关键字重写方法。

a)Override

b)New

6.()可以看作类的模具。

A.抽象类

B.接口

C.虚方法

7.以下叙述正确的是:

()

A•接口中可以有虚方法。

B.一个类可以实现多个接口。

C.接口不能被实例化。

D.接口中可以包含已实现的方法。

8.下列代码输出为():

classFather{

publicvoidF(){Console.WriteLine("A.F");}

publicvirtualvoidG(){Console.WriteLine("A.G");}

}

classSon:

Father{

newpublicvoidF(){Console.WriteLine("B.F");}

publicoverridevoidG(){Console.WriteLine("B.G");}

}

classoverride_new{

staticvoidMain(){

Sonb=newSon();

Fathera=b;

a.F();

b.F();

a.G();

b.G();

}

}

A.

A.F

B.F

A.G

B.G

B.

A.F

B.F

B.G

B.G

C.

A.F

A.F

B.G

B.G

D.

B.F

B.F

B.G

B.G

9.写出程序的输出结果:

publicclassA

{

publicvirtualvoidFun1(inti){

Console.WriteLine(i);

}

publicvoidFun2(Aa)

{

a.Fun1

(1);

Fun1(5);

publicclassB:

A{

publicoverridevoidFun1(inti)

{

base.Fun1(i+1);

}

publicstaticvoidMain()

Bb=newB();

Aa=newA();

a.Fun2(b);

b.Fun2(a);

}

}

10.

后跟继承的接口的名字,多个

在C#中,允许多接口继承,从多个接口时,使用“:

接口名称之间使用()符号进行分割。

(选择一项)

b)”->”

c),

d):

:

11.在.NET中,关于组件多态性的陈述,下面除了()都是正确的。

(选择一项)

a可以通过接口实现多态性

b可以通过抽象类实现多态性

c多态性不只是重载或重写,而是智能重写

d在多态性中,需要调用哪个方法的决定是在设计时做出的

12.多态性允许对类的某个方法进行调用而无需考虑该方法所提供的特定实现,例如,可能有名为了Road的类,它调用另一个类的Drive方法,另一个类可能是SportsCar或SmallCar,

但二者都提供Drive方法,虽然Drive方法的实现因类的不同而异,但Road类仍可以调

用它,并且它提供的结果可由Road类使用和解释。

在.NET中,可以由以下的方式来实现

组件中多态性,除了()。

(选择一项)

a)通过接口实现多态性

b)通过多个不同的子类从单个基类继承实现多态

c)通过抽象类实现多态性

d)通过受保护的成员函数来实现多态性

13.阅读以下的C#代码:

classA

{

publicabstractvoidprintStr(stringstr)

{

Console.WriteLine(str);

classB:

A

{

publicoverridevoidprintStr(stringstr)

{

str=str+"(重写的方法)";

Console.WriteLine(str);

}

}

classDefaultInitializerApp

{

publicstaticvoidMain()

{

Bb=newB();

Aa=b;

a.printStr(”打印");

b.printStr(”打印");

Console.ReadLine();

}

}

运行程序后将在控制台窗口打印()。

(选择一项)

a.打印重写的方法

b.打印打印重写的方法

c.打印

d.程序有误,不能运行

14•在C#的语法中,()关键字可以实现在派生类中对基类的虚函数进行重载(选一项)

a>override

b>new

c>static

d>virtual

15.对下面的C#程序:

usingSystem;

publicinterfaceIAccount

{

voidPosInterest();

voidDeductFees(intfeeSchedule);}

classBusinessAccount:

IAccount

{

intA;

publicstaticvoidMain()

{

Console.WriteLine(B.A);

Console.ReadLine();

}

publicvoidlAccount.PostInterest()

{

A=A+1;

}

publicvoidIAccount.DeductFees(intfeeSchedule)

{

A=A+feeSchedule;

}

}

以下的说法正确的是()(选择一项)

a)程序将出现编译错误,指示不能在实现接口BusinessAccount的类中定义成员A.

b)程序将出现编译错误,指示Public关键字对接口项无效

c)程序编译正常,但是出现运行时错误,指示变量A没有初始化

d)程序将正常运行,输出为0

16.可以使用()关键字重写方法。

A.Override

B.new

17.()可以看作类的模具。

A.抽象类

B.接口

C.虚方法

18.请问,此程序输出结果是()

abstractclassBaseClass{

publicvirtualvoidMethodA(){Console.WriteLine("BaseClass");}

publicvirtualvoidMethodB(){}

}

classClass1:

BaseClass{

publicvoidMethodA(){Console.WriteLine("Class1");}

publicoverridevoidMethodB(){}

}

classClass2:

Class1{

newpublicvoidMethodB(){}

}

classMainClass{

publicstaticvoidMain(string[]args){Class2o=newClass2();o.MethodA();}}

A.BaseClass

B.BassClassClass1

C.Classi

D.ClassiBassClass

19.请问,此程序输出结果是()

publicabstractclassA{publicA(){Console.WriteLine('A');}publicvirtualvoidFun(){Console.WriteLine("A.Fun(()");}}publicclassB:

A{publicB(){Console.WriteLine('B');}publicnewvoidFun(){Console.WriteLine("B.Fun()");}publicstaticvoidMain(){Aa=newB();a.Fun();}}

A.ABA.Fun()

B.ABB.Fun()

C.BAA.Fun()

D.BAB.Fun()

20.以下叙述正确的是():

A.接口中可以有虚方法。

B.一个类可以实现多个接口。

C.接口不能被实例化。

D.接口中可以包含已实现的方法。

21•以下关于C#代码的说法正确的是()。

(选择一项)

PublicabstractAnimal

{

PublicabstractvoidEat();

PublicvoidSleep()

{

}

}

a.

该段代码正确

b.

代码错误,因为类中存在非抽象方法

c.

代码错误,因为类中的方法没有实现

d.

通过代码"Animalan=newAnimal();

”可以创建一个Animal对象

22.在c#中,关于继承和接口,以下说法正确的是()(单选)

a.c#允许许多接口实现,也允许多重继承

b.c#允许多接口实现,但不允许多重继承

c.c#不允许多接口实现,但允许多重继承

d.c#不允许多重接口实现,也不允许多重继承

,请问在空白处1和空白处2

23)在C#中,已知下列代码的运行结果是“老虎吃动物”分别应该填写的代码是()

PublicclassAnimal

Public空白处1voidEat()

{

Consone.WriteLine("我要吃”);

}

}

PublicclassTiger:

Animal

{

Public空白处2voidEat()

{

Consone.WriteLine("老虎吃动物”);

}

PubliccalssTest

{

StaticvoidMain()

{

Animalan=newTiger();

an.Eat;

}

}

}

a)Virtual,new

b)override,virtual

c)virtual,override

d)new,virtual

24)在C#中,下列关于抽象类和接口的说法,正确的是)()(选择一项)

a)在抽象类中,所以的方法都是抽象方法

b)继承自抽象类的子类必须实现起父类(抽象类)中的所以抽象方法

c)在接口中,可以有方法实现,在抽象类中不能有方法实现

d)一个类可以从多个接口继承,也可以从多个抽象类继承

25)关于以下C#弋码的说法正确的是()

PublicabstractclassAnimal{

PublicabstractvoidEat();

}

PublicclassTiger:

Animal{

PublicoverridevoidEat(){

Console.WriteLine("老虎吃动物”);

}

}

PublicclassTigress:

Tiger{

Staticvoidmain(){

Tigresstiger=newTigress();

Tiger.Eat();

}

a)代码正确,但没有输出

b)代码正确,并且输出为”老虎吃动物”;

c)代码错误,因为Tigress类没有实现抽象基类Animal中的抽象方法

d)代码错误,因为抽象基类Animal的Eat方法没有实现

26)在c#中某程序员定义了一个DataBase接口,以及实现该接口的类CDataBase,下列关于该段代码说

法正确的是()(选择一项)

publicinterfaceIDataBase

{

voidOpenTable(stringtableName);

voidUpDataTable(stringtableName);

}

publicclassCDataBase:

IDataBase

{

publicvoidOpenTable(stringtableName)

{

Console.WriteLine(”打开数据表");

}

publicvoidUpdataTable(stringtableName)

{

Console.WriteLine(”更新数据表");

}

staticvoidMain()

{

CDataBasedb=newCDataBase();

db.OpenTable("Customers");

}

}

a)该段代码错误,因为在定义接口时,接口中的方法没有提供实现

b)该段代码错误,因为接口中声明的方法不是公有的,应此在CDataBase类中不能访问接口中的方法

c)该段代码正确,同时由于客户没有调用UpdataTable方法,可以把CDataTable类中的UpdataTable去掉,代码仍然正确

d)该段代码正确,但是如果在IDataBase接口中声明一个方法voidExecute(stringsql);则必须在

CDataBase中实现该方法

27.C#中下列代码运行结果是()(选择一项)

publicclassStudent{

publicvirtualvoidExam(){

Console.WriteLine(”学生都要考试");

}

}

publicclassUndergraduate:

Student{

publicnewvoidExam(){

base.Exam();

Console.WriteLine(”大学生有选择考试科目的权利");

}

}

publicclassTest{

staticvoidMain(){

Studentstu=newUndergraduate();

stu.Exam();

}

}

a)学生都要考试

b)大学生有选择考试科目的权利

c)大学生都要考试

大学生有选择考试科目的权利

d)学生都要考试

学生都要考试

28)c#中下列代码的运行结果是()(选择一项)

structStudent{

publicintage;

publicstringname;

publicStudent(intage,stringname){

this.age=age;

this.name=name;

}

}

publicclassTest{

staticvoidMian(){

Studentstu仁newStudent(18,"小方");

Studentstu2=newStudent(24,"小刚");

stu2=stu1;

stu1.age=30;

stu1.name="小燕";

Console.WriteLine(stu2.age);

Console.WriteLine(st2.name);

}

}

a)18小方

b)18小燕

c)30小燕

d)30小方

(选择一项)

29)在C#中,下列()关键字用于重写基类的虚拟方法。

a)override

b)new

c)base

d)virtual

委托和事件

C#面向对象编程-委托和事件

1阅读以下C#代码

Namespacetevent

{

publicdelegatevoidnotify5();

classeventTest

{

publicvoidRaise5(intI)

{

if(I%3==1)Got5();

}

publiceventnotify5Got5;

}

classHandlers

{

publicstaticvoidMethod1()

{

Console.WriteLine(”时间处理完成”);

}

}

classclass10

{

staticvoidMain(String[]args)

{

eventTesteObj=neweventTest();

eObj.Got5+=newnotify5(Handlers.Method1);

for(intcnt=0;cnt<5;cnt++)

{

inty=cnt*2+1;eObj.Raise5(y);

}

Console.WriteLine();}

}

代码允许的结果为()。

A)控制台窗口不能出任何信息。

B)在控制台窗口输出“时间处理完成”1次

C)在控制台窗口输出“时间处理完成”2次

D)在控制台窗口输出“时间处理完成”5次

2.声明一个委托publicdelegateintmyCallBack(intx);则用该委托产生的回调方法的原型应该是()

A.voidmyCallBack(intx)

B.intreceive(intnum)

C.stringreceive(intx)

D.不确定的

3.C#中,关于事件的定义正确的是()。

a)privateeventOnClick();

b)privateeventOnClick;

c)publicdelegatevoidClick();publiceventClickvoidOnClick();

d)publicdelegatevoidClick();publiceventClickOnClick

4.在C#中,下列代码的运行结果是().

PublicdelegatevoidBuyTicketDelegate(stringnum);

PublicclassStudent{

PubliceventBuyTicketDelegatebtEvent;

PublicStudent(stringnum)

{

btEvent+=newBuyTicketDelegate(this.BuyTicket);

}

PublicvoidShowNum(stringnum)

{

btEvent(num);

}

PrivatevoidBuyTicket(stringnum)

{

Console.WriteLine("我要买”+num+”次车票”);

}

}

StaticvoidMain()

{

Console.WriteLine("创建学生对象”);Studentstu=newStudent(“Tl”);

Console.WriteLine("创建完毕”);

Stu.ShowNum(“Tl”);

a)创建学生对象

b)创建学生对象

c)创建学生对象

创建完毕

我要买TI次车票创建完毕

创建完毕我要买TI次车票

d)我要买TI次车票创建学生对象创建完毕

C#面向对象编程-封装

1.c#语言使用()来引入名称空间。

a)Import

b)Using

c)Inelude

d)Lib

2.在.NET中,以下关于命名空间的描述,正确的是().(选择一项)

a)命名空间不可以进行嵌套

b)在一个.cs文件中,只能存在一个命名空间

c)使用private修饰的命名空间,其内部的类也不允许访问

d)命名空间使得代码更加有条理、结构更清晰

3.在C#类中()选一项

a)允许有多个相同名称的构造函数

b)允许有多个不同名称的构造函数

c)至少要有一个构造函数

d)只能有一个构造函数

4.在C#中,可以直接在名称空间内声明如下类型,除了()

A)数组

B)接口

C)结构

D)委托

5.C#程序中的类myClass中的成员变量var1如下:

publicclassmyClass{…privateintvar1;•••

则可以访问var1的有()。

(选择一项)

a)myClass中包含的类

b)myClass的继承类

c)myClass的父类

d)和myClass在同一命名空间下的类

6.下列关于类方法的声明,正确的是()(选择两项)

a)方法定义类所许可的行动

b)从一个类创建的所有对象可以使用同一组属性和方法

c)每个方法应该有一个参数

d)如果在不同类中定义了类似的操作,刚他们的行为不应该是类似的

7.析构函数的语法是()

semester(){〃析构函数的实现}

A.对

B.错

a)一个类中,只能有一个构造函数

b)构造函数的名称与类名一样

c)构造函数在对象销毁时自动执行

d)要求构造函数至少有两个参数

9.针对以下C#代码

UsingSystem;

PublicclassTeacher

{

PublicstringteacherName;

PublicstringteacherSubject;

PublicTeacher(Stringname){

This.teacherName=name;

}

PublicTeacher(Stringsubject"

This.teacherSubject=subject;

}

PublicTeacher(Stringname,Stringsubject){

This.teacherName=name;

This.teacherSubject=subject;

}

}

以下说法正确的是()(选择一项)

A)上述代码编译无错误,类中存在三个构造函数

B)上述代

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1