C#面向对象编程-练习题1.C#中的方法重写使用关键字(a)。a)overrideb)overloadc)staticd)Inherit2.以下的C#代码,试图用来定义一个接口:publicinterfaceIFile{intA;intdelFile(){A=3;}voiddisFile();}关于以上的代码,以下描述错误的是(d)。(选择一项)a)以上的代码中存在的错误包括:不能在接口中定义变量,所以intA代码行将出现错误b)以上的代码中存在的错误包括:接口方法delFile是不允许实现的,所以不能编写具体的实现函数c)代码voiddisFile();定义无错误,接口可以没有返回值d)代码voiddisFile();应该编写为voiddisFile(){};3.在C#中,接口与抽象基类的区别在于(a)。a)抽象基类可以包含非抽象方法,而接口只能包含抽象方法b)抽象基类可以被实例化,而接口不能被实例化c)抽象基类不能被实例化,而接口可以被实例化d)抽象基类就是接口,它们之间无差别4.在开发某图书馆的图书信息管理系统的过程中,开始为教材类图书建立一个TextBook类;现在又增加了杂志类图书,于是需要改变设计,则下面最好的设计应该是(c)。a)建立一个新的杂志类Journal。b)建立一个新的杂志类Journal,并继承TextBoook类。c)建立一个基类Book和一个新的杂志类Journal,并让Journal类和TextBoook类都继承于Book类。d)不建立任何类,把杂志图书的某些特殊属性加到TextBoook类中。5.可以使用(a)关键字重写方法。a)Overrideb)New6.以下叙述正确的是:(b,c)A.接口中可以有虚方法。B.一个类可以实现多个接口。C.接口不能被实例化。D.接口中可以包含已实现的方法。7.下列代码输出为(b):classFather{publicvoidF(){Console.WriteLine(A.F);}publicvirtualvoidG(){Console.WriteLine(A.G);}}classSon:Father{newpublicvoidF(){Console.WriteLine(B.F);}//隐藏父类的方法F(),但是父类中的方法F()还是存在publicoverridevoidG(){Console.WriteLine(B.G);}//重写父类中的方法G(),父类中的方法已不存在}classoverride_new{staticvoidMain(){Sonb=newSon();Fathera=b;//关键点a.F();//通过父类声明的对象,调用隐藏方法时,会调用父类中的A.F()b.F();//通过子类声明的对象,调用隐藏方法时,会调用子类中的B.F()a.G();//方法F()是隐藏方法,方法G()是重写方法b.G();}}A.A.FB.FA.GB.GB.A.FB.FB.GB.GC.A.FA.FB.GB.GD.B.FB.FB.GB.G8.写出程序的输出结果:publicclassA{publicvirtualvoidFun1(inti){Console.WriteLine(i);}publicvoidFun2(Aa){a.Fun1(1);Fun1(5);}}publicclassB:A{publicoverridevoidFun1(inti){base.Fun1(i+1);//base关键字调用的是父类的方法}publicstaticvoidMain(){Bb=newB();Aa=newA();a.Fun2(b);//结果:2,5b.Fun2(a);//结果:1,6}}答案:9.在C#中,允许多接口继承,从多个接口时,使用“:”后跟继承的接口的名字,多个接口名称之间使用()符号进行分割。(选择一项)ca)”.’b)”-”c)”,”d)”::”10.阅读以下的C#代码:classA{publicvirtualvoidprintStr(stringstr){Console.WriteLine(str);}}classB:A{publicoverridevoidprintStr(stringstr){str=str+重写的方法;Console.WriteLine(str);}}classDefaultInitializerApp{publicstaticvoidMain(){Bb=newB();Aa=b;//这条语句的含义应该是把B类定义的对象b赋值给A类定义的对象aa.printStr(打印);//即a=bb.printStr(打印);Console.ReadLine();}}运行程序后将在控制台窗口打印()。(选择一项)aa.打印重写的方法打印重写的方法b.打印打印重写的方法c.打印d.程序有误,不能运行11.在C#的语法中,()关键字可以实现在派生类中对基类的虚函数进行重写(选一项)aaoverridebnewcstaticdvirtual12.请问,此程序输出结果是()//c#中只有单重继承,所以子类只有一个父类cabstractclassBaseClass{publicvirtualvoidMethodA(){Console.WriteLine(BaseClass);}publicvirtualvoidMethodB(){}}classClass1:BaseClass{publicvoidMethodA(){Console.WriteLine(Class1);}publicoverridevoidMethodB(){}}classClass2:Class1{newpublicvoidMethodB(){}}classMainClass{publicstaticvoidMain(string[]args){Class2o=newClass2();o.MethodA();}}A.BaseClassB.BassClassClass1C.Class1D.Class1BassClassa13.请问,此程序输出结果是()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()14.以下叙述正确的是():bA.接口中可以有虚方法。B.一个类可以实现多个接口。C.接口不能被实例化。D.接口中可以包含已实现的方法。15.以下关于C#代码的说法正确的是()。(选择一项)aPublicabstractAnimal{PublicabstractvoidEat();PublicvoidSleep(){}}a.该段代码正确b.代码错误,因为类中存在非抽象方法c.代码错误,因为类中的方法没有实现d.通过代码“Animalan=newAnimal();”可以创建一个Animal对象16.在c#中,关于继承和接口,以下说法正确的是()(单选)ba.c#允许许多接口实现,也允许多重继承b.c#允许多接口实现,但不允许多重继承c.c#不允许多接口实现,但允许多重继承d.c#不允许多重接口实现,也不允许多重继承17.在C#中,已知下列代码的运行结果是“老虎吃动物”,请问在空白处1和空白处2分别应该填写的代码是()c//在用父类声明,子类构造时,隐藏方法和重写方法的区别PublicclassAnimal{Public空白处1voidEat(){Consone.WriteLine(“我要吃”);}}PublicclassTiger:Animal{Public空白处2voidEat(){Consone.WriteLine(“老虎吃动物”);}PubliccalssTest{StaticvoidMain(){Animalan=newTiger();an.Eat;}}}a)Virtual,newb)override,virtualc)virtual,overrided)new,virtual18.在C#中,下列关于抽象类和接口的说法,正确的是)()(选择一项)ba)在抽象类中,所有的方法都是抽象方法b)继承自抽象类的子类必须实现起父类(抽象类)中的所有抽象方法c)在接口中,可以有方法实现,在抽象类中不能有方法实现d)一个类可以从多个接口继承,也可以从多个抽象类继承19.关于以下C#代码的说法正确的是()bPublicabstractclassAnimal{PublicabstractvoidEat();}PublicclassTiger:Animal{PublicoverridevoidEat(){Console.WriteLine(“老虎吃动物”);}}PublicclassTigress:Tiger{Staticvoidmain(){Tigresstiger=newTigress();Tiger.Eat();}}a.代码正确,但没有输出b.代码正确,并且输出为”老虎吃动物”;c.代码错误,因为Tigress类没有实现抽象基类Animal中的抽象方法d.代码错误,因为抽象基类Animal的Eat方法没有实现20.在c#中某程序员定义了一个IDataBase接口,以及实现该接口的类CDataBase,下列关于该段代码说法正确的是()(选择一项)dpublicinterfaceIDataBase{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中实现该方法21.c#中下列代码运行结果是()(选择一项)apublicclassStudent{publicvirtualvoidExam(){Console.WriteLine(学生都要考试);}}publicclassUndergraduate:Student{publicnewvoidExam(){base.Exam();//调用基类中变量和方法Console.WriteLine(大学生有选择考试科目的权利);}}publicclassTest{staticvoidMain(){Studentstu=newUndergraduate();stu.Exam();}}a)学生都要考试b)大学生有选择考试科目的权利c)大学生都要考试大学生有选择考试科目的权利d)学生都要考试学生都要考试22.c#中下列代码的运行结果是()(选择一项)astruct