C#面向对象编程-多态
1.C#中的方法重写使用关键字()。
a) override
b) overload
c) static
d) inherit
2.以下的C#代码,试图用来定义一个接口:
public interface IFile{
    int A;
    int delFile()    {
        A = 3;
    }
    void disFile();
}
关于以上的代码,以下描述错误的是()。(选择一项)
a) 以上的代码中存在的错误包括:不能在接口中定义变量,所以int A代码行将出现错误
b) 以上的代码中存在的错误包括:接口方法delFile是不允许实现的,所以不能编写具体的实现函数
c) 代码void disFile();定义无错误,接口可以没有返回值
d) 代码void disFile();应该编写为void disFile(){};
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.下列代码输出为( ):
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"); }
}
class override_new{
  static void Main() {
      Son b = new Son();
      Father a = 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.写出程序的输出结果:
    public class A
    {
        public virtual void Fun1(int i)
        {
            Console.WriteLine(i);
        }
        public void Fun2(A a)
        {
            a.Fun1(1);
            Fun1(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);
            b.Fun2(a);
        }
}
答案:2,5,1,6
10.在C#中,允许多接口继承,从多个接口时,使用“:”后跟继承的接口的名字,多个接口名称之间使用()符号进行分割。(选择一项)
a)”.’
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#代码:
class A
    {
        public abstract 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. 打印 重写的方法
b. 打印    打印 重写的方法
c. 打印
d. 程序有误,不能运行
14.在C#的语法中,()关键字可以实现在派生类中对基类的虚函数进行重载(选一项)
a> override
b> new
c> static
d> virtual
15.对下面的C # 程序:
using System;
public interface IAccount
{   
    void PosInterest();   
    void DeductFees(int feeSchedule);
}
class BusinessAccount : IAccount
{   
    int A;
    public static void Main()
    {
        BusinessAccount B = new BusinessAccount();   
        Console.WriteLine(B.A);   
        Console.ReadLine();
    }
    public void IAccount.PostInterest()
    {   
        A = A+1;
    }
    public void IAccount.DeductFees(int feeSchedule)
    {   
        A = A + feeSchedule;
    }
}
以下的说法正确的是 ( )        (选择一项)
a)    程序将出现编译错误,指示不能在实现接口BusinessAccount的类中定义成员 A.
b)    程序将出现编译错误,指示Public关键字对接口项无效
c)    程序编译正常,但是出现运行时错误,指示变量A没有初始化
d)    程序将正常运行,输出为0
16.可以使用()关键字重写方法。
A. Override
B. new
17.()可以看作类的模具。
A. 抽象类
B. 接口
C. 虚方法
18.请问,此程序输出结果是()
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(); }
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。