C#面向物件的程式設計題
C#面向物件程式設計-練習題
這是一些基礎的繼承,重寫,抽象類的程式設計題
1.C#中的方法重寫使用關鍵字(A)。
a) override
b) overload
c) static
d) Inherit
2.以下的C#程式碼,試圖用來定義一個介面:
public interface IFile{
int A;
int delFile() {
A = 3;
}
void disFile();
}
關於以上的程式碼,以下描述錯誤的是(D)。(選擇一項)
a) 以上的程式碼中存在的錯誤包括:不能在介面中定義變數,所以int A程式碼行將出現錯誤
b) 以上的程式碼中存在的錯誤包括:介面方法delFile是不允許實現的,所以不能編寫具體的實現函式
c) 程式碼void disFile();定義無錯誤,介面可以沒有返回值
d) 程式碼void disFile();應該編寫為void disFile(){};//介面中不能去實現方法
3.在C#中,介面與抽象基類的區別在於(A)。
a) 抽象基類可以包含非抽象方法,而介面只能包含抽象方法
b) 抽象基類可以被例項化,而介面不能被例項化//抽象類和介面都不能例項化
c) 抽象基類不能被例項化,而介面可以被例項化
d) 抽象基類就是介面,它們之間無差別
4.在開發某圖書館的圖書資訊管理系統的過程中,開始為教材類圖書建立一個TextBook類;現在又增加了雜誌類圖書,於是需要改變設計,則下面最好的設計應該是(C)。
a) 建立一個新的雜誌類
b) 建立一個新的雜誌類Journal,並繼承TextBoook類。
c) 建立一個基類Book和一個新的雜誌類Journal,並讓Journal類和TextBoook類都繼承於Book類。
d) 不建立任何類,把雜誌圖書的某些特殊屬性加到TextBoook類中。
5.可以使用(A)關鍵字重寫方法。
a) Override
b) New
6.以下敘述正確的是:(B,C)
A.介面中可以有虛方法。//介面中只能有抽象類 B.一個類可以實現多個介面。
C.介面不能被例項化。 D.介面中可以包含已實現的方法。
7.下列程式碼輸出為( B):
class Father{
public void F() { Console.WriteLine("A.F"); }
public virtual void G() { Console.WriteLine("A.G"); }
}
class Son: Father{
new public void F() { Console.WriteLine("B.F"); }//被隱藏,但還在
public override void G() { Console.WriteLine("B.G"); }//父類中的G方法就不存在了
}
class override_new{
static void Main() {
Son b = new Son();
Father a = b;
a.F();//通過父類方法去呼叫父類中的F,就會是A。F
b.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
8.寫出程式的輸出結果:
public class A
{
public virtual void Fun1(int i)
{
Console.WriteLine(i);
}
public void Fun2(A a)
{
a.Fun1(1);//1
Fun1(5);5
}
}
public class B:A {
public override void Fun1(int i)
{
base.Fun1(i+1);
}
public static void Main() {
B b=new B();
A a=new A();
a.Fun2(b);//2,5
b.Fun2(a);1,6
}
}
答案:
9.在C#中,允許多介面繼承,從多個介面時,使用“:”後跟繼承的介面的名字,多個介面名稱之間使用(C)符號進行分割。(選擇一項)
a)”.’
b)”->”
c)”,”
d)”::”
10.閱讀以下的C#程式碼:
class A
{
public virtual void printStr(string str)
{
Console.WriteLine(str);
}
}
class B:A
{
public override void printStr(string str)
{
str=str+" 重寫的方法";
Console.WriteLine(str);
}
}
class DefaultInitializerApp
{
public static void Main()
{
B b=new B();
A a=b;
a.printStr("列印");
b.printStr("列印");
Console.ReadLine();
}
}
執行程式後將在控制檯視窗列印(A )。(選擇一項)
a. 列印 重寫的方法 列印 重寫的方法
b. 列印 列印 重寫的方法
c. 列印
d. 程式有誤,不能執行
11.在C#的語法中,(A)關鍵字可以實現在派生類中對基類的虛擬函式進行過載(選一項)
a> override
b> new
c> static
d> virtual
12.請問,此程式輸出結果是(C)
abstract class BaseClass{
public virtual void MethodA(){Console.WriteLine("BaseClass");}
public virtual void MethodB(){}
}
class Class1: BaseClass{
public void MethodA(){Console.WriteLine("Class1");}
public override void MethodB(){}
}
class Class2: Class1{
new public void MethodB(){}
}
class MainClass{
public static void Main(string[] args){Class2 o = new Class2();o.MethodA(); }
}
A. BaseClass
B. BassClass Class1
C. Class1
D. Class1 BassClass
13.請問,此程式輸出結果是(A)
public abstract class A { public A() { Console.WriteLine('A'); }
public virtual void Fun() { Console.WriteLine("A.Fun()"); } }
public class B: A { public B() { Console.WriteLine('B'); }
public new void Fun() { Console.WriteLine("B.Fun()"); }
public static void Main() { A a = new B();a.Fun(); } }
A. A B A.Fun()
B. A B B.Fun()
C. B A A.Fun()
D. B A B.Fun()
14.以下敘述正確的是(BC):
A. 介面中可以有虛方法。
B. 一個類可以實現多個介面。
C. 介面不能被例項化。
D. 介面中可以包含已實現的方法。
15.以下關於C#程式碼的說法正確的是(A)。(選擇一項)
Public abstract Animal
{
Public void Sleep()
{
}
}
a. 該段程式碼正確
b. 程式碼錯誤,因為類中存在非抽象方法
c. 程式碼錯誤,因為類中的方法沒有實現
d. 通過程式碼“Animal an = new Animal();”可以建立一個Animal物件
16.在c#中,關於繼承和介面,以下說法正確的是(B) (單選)
a. c#允許許多介面實現,也允許多重繼承
b.c#允許多介面實現,但不允許多重繼承
c.c#不允許多介面實現,但允許多重繼承
d.c#不允許多重介面實現,也不允許多重繼承
17. 在C#中,已知下列程式碼的執行結果是“老虎吃動物”,請問在空白處1和空白處2
分別應該填寫的程式碼是(C)
Public class Animal
{
Public 空白處1 void Eat()
{
Consone.WriteLine(“我要吃”);
}
}
Public class Tiger:Animal
{
Public 空白處2 void Eat()
{
Consone.WriteLine(“老虎吃動物”);
}
Public calssTest
{
Static void Main()
{
Animal an = new Tiger();
an.Eat;
}
}
}
a) Virtual , new
b) override , virtual
c) virtual , override
d) new , virtual
18. 在C#中,下列關於抽象類和介面的說法,正確的是)(B)(選擇一項)
a) 在抽象類中,所以的方法都是抽象方法
b) 繼承自抽象類的子類必須實現起父類(抽象類)中的所以抽象方法
c) 在介面中,可以有方法實現,在抽象類中不能有方法實現
d) 一個類可以從多個介面繼承,也可以從多個抽象類繼承
19. 關於以下C#程式碼的說法正確的是(B)
Public abstract class Animal{
Public abstract void Eat();
}
Public class Tiger:Animal{
Public override void Eat(){
Console.WriteLine(“老虎吃動物”);
}
}
Public class Tigress:Tiger{
Static void main(){
Tigress tiger=new Tigress();
Tiger.Eat();
}
}
a. 程式碼正確,但沒有輸出
b. 程式碼正確,並且輸出為”老虎吃動物”;
c. 程式碼錯誤,因為Tigress類沒有實現抽象基類Animal中的抽象方法
d. 程式碼錯誤,因為抽象基類Animal的Eat方法沒有實現
20. 在c#中 某程式設計師定義了一個IDataBase介面,以及實現該介面的類CDataBase ,下列關於該段程式碼說法正確的是(D)(選擇一項)
public interface IDataBase
{
void OpenTable(string tableName);
void UpDataTable(string tableName);
}
public class CDataBase:IDataBase
{
public void OpenTable(string tableName)
{
Console.WriteLine("開啟資料表");
}
public void UpdataTable(string tableName)
{
Console.WriteLine("更新資料表");
}
static void Main()
{
CDataBase db = new CDataBase();
db.OpenTable("Customers");
}
}
a)該段程式碼錯誤,因為在定義介面時,介面中的方法沒有提供實現
b)該段程式碼錯誤,因為介面中宣告的方法不是公有的,應此在CDataBase類中不能訪問介面中的方法
c)該段程式碼正確,同時由於客戶沒有呼叫UpdataTable方法,可以把CDataTable類中的UpdataTable去掉,程式碼仍然正確
d)該段程式碼正確,但是如果在IDataBase 介面中宣告一個方法void Execute(string sql); 則必須在CDataBase中實現該方法
21.c#中 下列程式碼執行結果是(a)(選擇一項)
public class Student{
public virtual void Exam(){
Console.WriteLine("學生都要考試");
}
}
public class Undergraduate:Student{
public new void Exam(){
base.Exam();//從這直接去到了父類中
Console.WriteLine("大學生有選擇考試科目的權利");//隱藏了
}
}
public class Test{
static void Main() {
Student stu = new Undergraduate();
stu.Exam();
}
}
a)學生都要考試
b)大學生有選擇考試科目的權利
c)大學生都要考試
大學生有選擇考試科目的權利
d)學生都要考試
學生都要考試
22.c#中 下列程式碼的執行結果是(A)(選擇一項)
struct Student{
public int age;
public string name;
public Student(int age,string name){
this.age=age;
this.name=name;
}
}
public class Test{
static void Mian(){
Student stu1= new Student(18,"小方");
Student stu2= new Student(24,"小剛");
stu2=stu1;
stu1.age=30;
stu1.name="小燕";
Console.WriteLine(stu2.age);
Console.WriteLine(st2.name);
}
}
a)18 小方
b)18 小燕
c)30 小燕
d)30 小方
23.在C#中,下列(B)關鍵字用於重寫基類的虛擬方法。(選擇一項)
a)override
b)new
c)base
d)virtual