c#编程面试题------------------面向对象

学习笔记 / 2023-08-08 / 原文

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

a) override

b) overload

c) static

d) Inherit

//解析:override是重写方法关键字

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,并继承TextBook类。

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

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

//解析:教材和杂志都属于图书,可使用图书类的共同属性,建立一个基类有助于减少重复

 

 

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

 

      A.接口中可以有虚方法。         B.一个类可以实现多个接口。

 

      C.接口不能被实例化。           D.接口中可以包含已实现的方法。

//解析:一个类可以实现多个接口。接口不能被实例化。  

 

 

6.下列代码输出为( 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"); }//隐藏了父类中的方法,父类中的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();//通过父类声明的对象 调用隐藏方法,会调用父类中的  A.F


      b.F();//通过子类声明的对象 调用隐藏方法,会调用子类中的  B.F


      a.G();// B.G


      b.G();//B.G


   }


}

 

 

  1. A.F    B.F    A.G   B.G
  2. A.F    B.F    B.G   B.G
  3. A.F    A.F    B.G   B.G
  4. B.F    B.F    B.G   B.G

 

 

 

 

7.在C#中,允许多接口继承,从多个接口时,使用“:”后跟继承的接口的名字,

多个接口名称之间使用(c)符号进行分割。(选择一项)

 

 a)”.’

 

b)”->”

 

c)”,”

 

d)”::”

//解析:多个接口继承使用”,”分隔

 

 

 

8.请问,此程序输出结果是(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()

//解析:B继承A,会执行AB的构造函数,输出A B,B隐藏继承的Fun,执行了A的Fun 输出 A.Fun()

 

9.以下关于C#代码的说法正确的是(a)。(选择一项)

Public abstract Animal

{

Public abstract void Eat();

Public void Sleep()

{

}

}

 

 

  1. A.该段代码正确
  2. B.代码错误,因为类中存在非抽象方法
  3. C.代码错误,因为类中的方法没有实现
  4. D.通过代码“Animal an = new Animal();”可以创建一个Animal对象

//解析:Animal 是抽象类,不可直接实例化

 

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

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

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

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

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

//解析:c#允许多接口实现,但不允许多重继承

 

11. 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

 

12. 关于以下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();

}

 

}

 

  1. 代码正确,但没有输出
  2. 代码正确,并且输出为”老虎吃动物”;
  3. 代码错误,因为Tigress类没有实现抽象基类Animal中的抽象方法
  4. 代码错误,因为抽象基类Animal的Eat方法没有实现

 

13.C#中,下列(a)关键字用于重写基类的虚拟方法。(选择一项)

 

a)override

 

b)new

 

c)base

 

d)virtual

 

14.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)学生都要考试

学生都要考试

 

15.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中实现该方法