1. 程式人生 > >C#面向物件的程式設計題

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) 建立一個新的雜誌類

Journal。

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