第八章 C#面向对象的编程《算法与程序设计--C#》(河北科学技术出版社)章节过关卷

2025-09-16
| 2份
| 25页
| 83人阅读
| 0人下载

资源信息

学段 中职
学科 职教专业课
课程 算法与程序设计(C#)
教材版本 算法与程序设计-C#
年级 -
章节 项目八 C#面向对象编程
类型 作业-单元卷
知识点 C#面向对象编程
使用场景 同步教学-单元练习
学年 2025-2026
地区(省份) 河北省
地区(市) -
地区(区县) -
文件格式 ZIP
文件大小 262 KB
发布时间 2025-09-16
更新时间 2025-09-16
作者 liqp_080269423
品牌系列 学易金卷·阶段检测模拟卷
审核时间 2025-09-16
下载链接 https://m.zxxk.com/soft/53942096.html
价格 3.00储值(1储值=1元)
来源 学科网

内容正文:

《算法与程序设计--C#》河北科学技术出版社 第八章 C#面向对象的编程 考试时间:90分钟 满分:100分 姓名 班级 学号 1、 单项选择题(本题共20小题,每题2分,共40分) 1.以下不能用来修饰类的关键字是( ) A. sealed B. abstract C. override D. public 【答案】C 【解析】override 用于重写继承的虚方法或抽象方法,不能修饰类;sealed 可修饰类表示密封类,不能被继承;abstract 修饰抽象类;public 修饰公共类,可被外部访问 。 2.关于虚方法和抽象方法,说法正确的是( )。 A. 虚方法必须在派生类中重写,抽象方法不需要重写 B. 虚方法可以在派生类中重写,抽象方法必须重写 C. 虚方法必须在派生类中重写,抽象方法必须重写 D. 虚方法可以在派生类中重写,抽象方法也不需要重写 【答案】B 【解析】虚方法(virtual 修饰)是基类中定义的可在派生类中选择重写的方法;抽象方法(abstract 修饰)定义在抽象类中,派生类必须重写实现 。 3.定义类 MyClass 及方法 public void Show(),创建对象 MyClass obj = new MyClass(); 后,访问 Show 方法正确的是( )。 A. obj.Show(); B. obj::Show(); C. MyClass.Show(); D. MyClass::Show(); 【答案】A 【解析】实例方法通过对象实例调用,格式为 对象名.方法名() ;静态方法才通过 类名.方法名() 调用,这里 Show 是实例方法 。 4.在 C# 中,用( )关键字修饰的方法是抽象方法。 A. this B. abstract C. new D. virtual 【答案】B 【解析】abstract 关键字用于定义抽象方法,抽象方法只有声明没有实现,需在派生类中重写;virtual 修饰虚方法,有默认实现;this 指代当前对象;new 用于隐藏继承的成员 。 5.关于 C# 继承,错误的说法是( )。 A. 一个子类能同时继承多个父类 B. 标记为 sealed 的类不能被继承 C. 子类继承父类,也可称父类派生子类 D. Object 类是所有类的直接或间接基类 【答案】A 【解析】C# 中一个子类只能有一个直接父类,不支持多重继承;sealed 修饰的类是密封类,不能被继承;子类由父类派生而来,表述合理;.NET 中所有类最终都间接或直接继承自 Object 类 。 6.派生类访问基类成员,可使用( )关键字。 A. base B. this C. out D. external 【答案】A 【解析】base 用于在派生类中访问基类的构造函数、属性和方法;this 指代当前类对象;out 是方法参数修饰符;external 用于声明外部实现的方法 。 7.以下对 C# “委托”和“事件”关系的描述,正确的是( ) A. 事件本质是一种特殊的委托,封装了委托的订阅/取消逻辑 B. 委托就是事件,二者完全等价 C. 事件能直接赋值方法,委托不行 D. 委托可在类外部直接触发,事件也能在类外部直接触发 【答案】A 【解析】 - A:事件基于委托实现,内部封装委托实例,对外暴露 +=(订阅)、-=(取消),隐藏直接赋值(如 = ),避免外部随意修改,A 正确; - B:委托是“方法引用类型”,事件是“基于委托的封装”,用于解耦发布 - 订阅逻辑,不等价,B 错误; - C:事件不能直接赋值(禁止 event1 = 方法 ,只能 event1 += 方法 ),委托可直接赋值(如 myDelegate = 方法 ),C 错误; - D:事件设计为“类内部触发、外部订阅”,类外部无法直接触发事件;委托若暴露可在外部调用(如 myDelegate() ),D 错误。 9.关于抽象类,错误的是( )。 A. 抽象类不能被实例化 B. 抽象类可以包含抽象方法 C. 抽象类可以包含非抽象方法 D. 抽象类可以直接创建对象使用 【答案】D 【解析】抽象类是为了被继承设计的,不能直接实例化对象;它可包含抽象方法(需派生类实现 )和非抽象方法(有具体实现 ) 。 10.关于方法重载,错误的是( )。 A. 可通过参数个数不同重载 B. 可通过参数类型不同重载 C. 可通过参数顺序不同重载 D. 可通过返回值类型不同重载 【答案】D 【解析】方法重载要求方法名相同,参数列表(参数个数、类型、顺序 )不同;返回值类型不同不能作为重载依据,因为调用时无法仅通过返回值区分调用哪个方法 。 【解析】继承的传递性指子类继承父类,父类继承祖父类等,子类会继承所有间接基类的可继承成员 。 11.以下继承说法错误的是( )。 A. .NET 中 Object 类是所有类的基类 B. 派生类不能直接访问基类的私有成员 C. protected 修饰的成员,派生类和同一程序集内其他类可访问 D. 基类对象不能引用派生类对象 【答案】D 【解析】派生类是基类的特殊化,基类对象可以引用派生类对象(多态中的向上转型 ,如 BaseClass obj = new DerivedClass(); );Object 是所有类的最终基类;私有成员只能在类内部访问,派生类也无法直接访问;protected 成员在派生类和同一程序集内可访问 。 12.继承具有( ),即基类是派生类时,派生类会继承间接基类成员。 A. 规律性 B. 传递性 C. 重复性 D. 多样性 【答案】B 【解析】继承的传递性指子类继承父类,父类继承祖父类等,子类会继承所有间接基类的可继承成员 。 13.正确的说法是( )。 A. 派生类对象不可以强制转换为基类对象 B. 在任何情况下,基类对象都不能转换为派生类对象 C. 接口不能实例化,但可引用实现它的类的对象 D. 基类对象可直接访问派生类新增成员 【答案】C 【解析】派生类对象可隐式转换为基类对象(向上转型 );基类对象在一定条件下(如先向上转型为基类的派生类对象可再向下转型 ,需结合 as 或强制转换 )可转换为派生类对象;接口是一种规范,不能实例化,但可通过实现类的对象引用;基类对象不能直接访问派生类新增成员,需转换为派生类类型后访问 。 14.关于 base 关键字,使用错误的是( )。 A. 子类中用 base 调用父类构造函数 B. 子类中用 base 访问父类公共属性 C. 子类中用 base 不能调用父类 protected 成员 D. 子类中用 base 不能调用父类 private 成员 【答案】C 【解析】base 可在子类中调用父类构造函数、访问父类的公共和 protected 成员;父类 private 成员因访问限制,无法通过 base 访问 。 15.关于抽象类,正确的是( )。 A. 抽象类能被实例化 B. 含抽象方法的类一定是抽象类 C. 抽象类可以是静态类 D. 抽象类的抽象方法不能在派生类重写 【答案】B 【解析】抽象类不能实例化;包含抽象方法的类必须定义为抽象类;抽象类不能是静态类(静态类不能被继承,抽象类设计目的是被继承 );抽象方法必须在派生类中重写实现 。 16.类中编写两个同名方法 public void Play() 和 public void Play(string game),执行 Play("足球"); 调用的是( )。 class GamePlayer { public void Play() { Console.WriteLine("玩游戏"); } public void Play(string game) { Console.WriteLine($"玩{game}"); } static void Main() { GamePlayer p = new GamePlayer(); p.Play("足球"); } } A. Play() B. 随机调用 C. Play(string game) D. 无输出 【答案】C 【解析】方法重载根据参数列表匹配,调用 Play("足球") 时,参数是 string 类型,匹配 Play(string game) 方法 。 17.C# 中一个类( )。 A. 可以继承多个类 B. 可以实现多个接口 C. 一个程序中只能有一个子类 D. 只能实现一个接口 【答案】B 【解析】C# 不支持类的多重继承,但支持一个类实现多个接口,接口实现可让类具备多种行为规范 。 18.关于构造函数,正确的是( )。 A. 可定义多个同名、参数不同的构造函数 B. 类中必须显式定义构造函数 C. 构造函数名称必须和类名不同 D. 一个类只能有一个构造函数 【答案】A 【解析】构造函数可重载,即定义多个同名但参数列表不同的构造函数;类默认有无参构造函数,可不显式定义;构造函数名必须与类名一致;一个类可多个构造函数 。 19.分析程序,创建 Derived d = new Derived(); 时,构造函数执行顺序是( )。 class Base { public Base() { Console.Write("Base "); } } class Derived : Base { public Derived() { Console.Write("Derived "); } } A. 先 Base 后 Derived B. 先 Derived 后 Base C. 只执行 Base D. 只执行 Derived 【答案】A 【解析】创建派生类对象时,先调用基类构造函数,再调用派生类构造函数,保证基类成员先初始化 。 20.以下关于 C# 委托的说法,正确的是( ) A. 委托只能关联有返回值的方法 B. 委托定义后可直接调用,无需关联方法 C. 委托是一种特殊的类,用于封装方法引用 D. 不同签名的方法,一定无法关联到同一个委托 【答案】C 【解析】 - A:委托可关联无返回值(void)方法,只要方法签名匹配即可,A 错误; - B:委托需先关联方法(通过赋值或 += 绑定),才能调用,否则抛异常,B 错误; - C:委托本质是引用类型,封装方法引用,可理解为“方法的容器” ,C 正确; - D:若方法参数能隐式转换、返回值兼容,不同签名也可能关联同一委托(如 int 与 long 隐式转换场景 ),D 错误。 二、判断题(本大题共 10 小题,每小题 2 分,共 20分) 1.基类的抽象方法,派生类必须提供实现。( ) 【答案】√ 【解析】抽象方法无实现,派生类继承抽象类后必须重写实现抽象方法 。 2.static 修饰的成员,既可以通过类访问,也能通过对象访问。( ) 【答案】√ 【解析】静态成员属于类,可通过 类名.静态成员 或 对象名.静态成员(不推荐,易混淆 )访问,但更规范的是用类名访问 。 3.方法修饰符为 protected 时,仅派生类可访问,同一工程其他类不能访问。( ) 【答案】× 【解析】protected 修饰的成员,在派生类和同一程序集内的其他类都可访问(C# 中 protected internal 是程序集内和派生类可访问,单纯 protected 是派生类可访问,这里题目表述不准确,严谨说 protected 是派生类可访问,不管是否同一程序集 ;若结合常见教学场景,认为错误,因为同一程序集非派生类不能访问 ) 。 4.类成员访问修饰符默认是 private。( ) 【答案】√ 【解析】C# 中类的成员(字段、方法等 )如果不指定访问修饰符,默认是 private ;类本身默认是 internal 。 5.创建派生类对象时,先调用派生类构造函数,再调用基类构造函数。( ) 【答案】× 【解析】创建派生类对象,构造函数执行顺序是先基类构造函数,再派生类构造函数,保证基类成员先初始化 。 6.被 sealed 关键字修饰的方法,不能在派生类中重写。( ) 【答案】√ 【解析】sealed 可用于修饰重写后的方法,阻止在更下层派生类中继续重写该方法 。 7.抽象类中所有方法都必须是抽象方法。( ) 【答案】× 【解析】抽象类可包含抽象方法(必须重写 )和非抽象方法(有实现,派生类可直接使用或重写 ) 。 8.类是对象的抽象,对象是类的实例。( ) 【答案】√ 【解析】类定义了对象的属性和行为模板,对象是类创建的具体实例,体现了抽象和实例的关系 。 9.私有虚方法不能被派生类重写。( ) 【答案】√ 【解析】私有成员只能在类内部访问,派生类无法访问私有虚方法,也就不能重写 。 10.抽象类的抽象方法可以在其他类中随意重写。( ) 【答案】× 【解析】抽象类的抽象方法只能在其直接或间接派生类中,且派生类需是非抽象类时必须重写,不是随意在其他无关类重写 。 三、填空题(本大题共 10 小题,每小题 2分,共 20 分) 1.( ) 是对对象的抽象,将对象的属性和行为封装,形成独立单位。 【答案】类 【解析】类是抽象的概念,定义对象的特征和行为,对象是类的具体实例 。 2.this 代表本类对象,( ) 代表父类对象。 【答案】base 【解析】base 用于在派生类中访问父类的构造函数、属性和方法 。 3.若一个类包含至少一个抽象方法,它必须是 ( ) 类。 【答案】抽象 或 abstract 【解析】包含抽象方法的类必须用 abstract 修饰为抽象类,抽象类不能实例化,需派生类继承并实现抽象方法 。 4.( ) 指同一消息作用于不同对象,有不同解释和执行结果。 【答案】多态 【解析】多态通过方法重写(继承体系 )和方法重载(同一类中 )实现,让程序更灵活 。 5.在方法前加 ( ) 关键字,该方法是虚方法。 【答案】virtual 【解析】虚方法允许派生类重写,实现多态,基类中定义,派生类可选择重写 。 6.用 ( ) 关键字声明抽象类。 【答案】abstract 【解析】abstract 修饰类为抽象类,抽象类可包含抽象方法和非抽象方法,用于定义通用的抽象概念 。 7.C# 不支持类多重继承,可用 ( ) 机制实现类似多重继承的功能。 【答案】接口 或 interface 【解析】一个类可实现多个接口,通过实现不同接口,获得多个接口定义的行为,间接实现类似多重继承的效果 。 8.C# 程序执行,从 ( ) 方法开始。 【答案】Main 【解析】Main 方法是 C# 程序入口,程序启动后首先执行 Main 方法中的代码 。 9.方法无返回值时,返回值类型说明符是 ( ) 。 【答案】void 【解析】void 用于声明方法没有返回值,调用这类方法主要执行操作逻辑 。 10.静态方法中__________(填“能”或“不能” )使用 this 关键字,因为静态方法不依赖于对象实例。 【答案】不能 【解析】静态方法属于类,调用时不需要创建对象实例,而 this 是关联对象实例的,所以静态方法中无法使用 this,填“不能” 四、程序分析题(共2题,每题5分,共10分) 1.分析程序运行结果: class Program { static void Main(string[] args) { Dog d = new Dog(); d.Eat(); d.Sleep(); Console.Read(); } } public abstract class Animal { public abstract void Sleep(); public virtual void Eat() { Console.Write("动物吃东西"); } } public class Dog : Animal { public override void Sleep() { Console.Write("狗狗睡觉"); } public override void Eat() { Console.Write("狗狗啃骨头"); } } 【答案】狗狗啃骨头狗狗睡觉 【解析】Dog 类继承 Animal 类,重写了 Sleep 抽象方法和 Eat 虚方法。创建 Dog 对象调用方法时,执行重写后的 Eat 和 Sleep 方法 。 2.分析程序运行结果: class BaseClass { public virtual bool Check() { return true; } public virtual string GetInfo() { return "base"; } } class SubClass1 : BaseClass { public override bool Check() { return false; } public override string GetInfo() { return "sub1"; } } class SubClass2 : SubClass1 { new public string GetInfo() { return "sub2"; } } class MainEntry { static void Main() { SubClass2 o = new SubClass2(); SubClass1 q = new SubClass2(); Console.WriteLine(o.Check()); Console.WriteLine(o.GetInfo()); Console.WriteLine(q.GetInfo()); Console.Read(); } } 【答案】false 、sub2 、sub1 【解析】Check 方法因重写,SubClass2 对象调用执行 SubClass1 中重写的逻辑返回 false ;GetInfo 方法,SubClass2 中用 new 隐藏继承的方法,o(SubClass2 类型 )调用自身 new 后的 GetInfo 返回 sub2 ,q(SubClass1 类型 )调用继承的重写方法返回 sub1 。 五、程序填空题(共1题,每题5分,共5分) 1.以下代码定义了一个接口 ISwimable 和一个类 Fish,请补充完整 Fish 类的代码,使其能够正确实现 ISwimable 接口并在 Main 方法中输出鱼游泳的信息。 interface ISwimable { void Swim(); } class Fish : ______________ { public void Swim() { Console.WriteLine("Fish is swimming in the water"); } } class Program { static void Main() { ISwimable fish = new Fish(); fish.Swim; } } 答案:ISwimable 解析:在 C# 中,类要实现接口,需要在类名后使用 : 加上接口名,这里要实现 ISwimable 接口,所以应填 ISwimable。 六、程序改错题(共1题,每题5分,共5分) 1. 创建 Bird 对象 new Bird("麻雀") 时,因构造函数中用 base(name) 调用基类带参构造函数,先执行基类 Animal(string name) 构造函数,再执行 Bird 带参构造函数,使程序最终输出结果是“ 动物带参构造 鸟类带参构造 麻雀”。 class Program { static void Main(string[] args) { Bird b = new Bird("麻雀"); Console.ReadLine(); } } public class Animal { public Animal() { Console.Write("动物构造 "); } public Animal(string name) { Console.Write("动物带参构造 "); } } public class Bird : Animal { public Bird() { Console.Write("鸟类构造 "); } public Bird(string name) : base() { Console.Write($"鸟类带参构造 {name} "); } } 【答案】 错误: public Bird(string name) : base() 改正: public Bird(string name) : base(name) 【解析】执行基类 Animal(string name) 带参数构造函数输出 动物带参构造 ,再执行 Bird 带参构造输出 鸟类带参构造 麻雀 。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 《算法与程序设计--C#》河北科学技术出版社 第八章 C#面向对象的编程 考试时间:90分钟 满分:100分 姓名 班级 学号 1、 单项选择题(本题共20小题,每题2分,共40分) 1.以下不能用来修饰类的关键字是( ) A. sealed B. abstract C. override D. public 2.关于虚方法和抽象方法,说法正确的是( )。 A. 虚方法必须在派生类中重写,抽象方法不需要重写 B. 虚方法可以在派生类中重写,抽象方法必须重写 C. 虚方法必须在派生类中重写,抽象方法必须重写 D. 虚方法可以在派生类中重写,抽象方法也不需要重写 3.定义类 MyClass 及方法 public void Show(),创建对象 MyClass obj = new MyClass(); 后,访问 Show 方法正确的是( )。 A. obj.Show(); B. obj::Show(); C. MyClass.Show(); D. MyClass::Show(); 4.在 C# 中,用( )关键字修饰的方法是抽象方法。 A. this B. abstract C. new D. virtual 5.关于 C# 继承,错误的说法是( )。 A. 一个子类能同时继承多个父类 B. 标记为 sealed 的类不能被继承 C. 子类继承父类,也可称父类派生子类 D. Object 类是所有类的直接或间接基类 6.派生类访问基类成员,可使用( )关键字。 A. base B. this C. out D. external 7.以下对 C# “委托”和“事件”关系的描述,正确的是( ) A. 事件本质是一种特殊的委托,封装了委托的订阅/取消逻辑 B. 委托就是事件,二者完全等价 C. 事件能直接赋值方法,委托不行 D. 委托可在类外部直接触发,事件也能在类外部直接触发 9.关于抽象类,错误的是( )。 A. 抽象类不能被实例化 B. 抽象类可以包含抽象方法 C. 抽象类可以包含非抽象方法 D. 抽象类可以直接创建对象使用 10.关于方法重载,错误的是( )。 A. 可通过参数个数不同重载 B. 可通过参数类型不同重载 C. 可通过参数顺序不同重载 D. 可通过返回值类型不同重载 11.以下继承说法错误的是( )。 A. .NET 中 Object 类是所有类的基类 B. 派生类不能直接访问基类的私有成员 C. protected 修饰的成员,派生类和同一程序集内其他类可访问 D. 基类对象不能引用派生类对象 12.继承具有( ),即基类是派生类时,派生类会继承间接基类成员。 A. 规律性 B. 传递性 C. 重复性 D. 多样性 13.正确的说法是( )。 A. 派生类对象不可以强制转换为基类对象 B. 在任何情况下,基类对象都不能转换为派生类对象 C. 接口不能实例化,但可引用实现它的类的对象 D. 基类对象可直接访问派生类新增成员 14.关于 base 关键字,使用错误的是( )。 A. 子类中用 base 调用父类构造函数 B. 子类中用 base 访问父类公共属性 C. 子类中用 base 不能调用父类 protected 成员 D. 子类中用 base 不能调用父类 private 成员 15.关于抽象类,正确的是( )。 A. 抽象类能被实例化 B. 含抽象方法的类一定是抽象类 C. 抽象类可以是静态类 D. 抽象类的抽象方法不能在派生类重写 16.类中编写两个同名方法 public void Play() 和 public void Play(string game),执行 Play("足球"); 调用的是( )。 class GamePlayer { public void Play() { Console.WriteLine("玩游戏"); } public void Play(string game) { Console.WriteLine($"玩{game}"); } static void Main() { GamePlayer p = new GamePlayer(); p.Play("足球"); } } A. Play() B. 随机调用 C. Play(string game) D. 无输出 17.C# 中一个类( )。 A. 可以继承多个类 B. 可以实现多个接口 C. 一个程序中只能有一个子类 D. 只能实现一个接口 18.关于构造函数,正确的是( )。 A. 可定义多个同名、参数不同的构造函数 B. 类中必须显式定义构造函数 C. 构造函数名称必须和类名不同 D. 一个类只能有一个构造函数 19.分析程序,创建 Derived d = new Derived(); 时,构造函数执行顺序是( )。 class Base { public Base() { Console.Write("Base "); } } class Derived : Base { public Derived() { Console.Write("Derived "); } } A. 先 Base 后 Derived B. 先 Derived 后 Base C. 只执行 Base D. 只执行 Derived 20.以下关于 C# 委托的说法,正确的是( ) A. 委托只能关联有返回值的方法 B. 委托定义后可直接调用,无需关联方法 C. 委托是一种特殊的类,用于封装方法引用 D. 不同签名的方法,一定无法关联到同一个委托 二、判断题(本大题共 10 小题,每小题 2 分,共 20分) 1.基类的抽象方法,派生类必须提供实现。( ) 2.static 修饰的成员,既可以通过类访问,也能通过对象访问。( ) 3.方法修饰符为 protected 时,仅派生类可访问,同一工程其他类不能访问。( ) 4.类成员访问修饰符默认是 private。( ) 5.创建派生类对象时,先调用派生类构造函数,再调用基类构造函数。( ) 6.被 sealed 关键字修饰的方法,不能在派生类中重写。( ) 7.抽象类中所有方法都必须是抽象方法。( ) 8.类是对象的抽象,对象是类的实例。( ) 9.私有虚方法不能被派生类重写。( ) 【答案】√ 10.抽象类的抽象方法可以在其他类中随意重写。( ) 三、填空题(本大题共 10 小题,每小题 2分,共 20 分) 1.( ) 是对对象的抽象,将对象的属性和行为封装,形成独立单位。 2.this 代表本类对象,( ) 代表父类对象。 3.若一个类包含至少一个抽象方法,它必须是 ( ) 类。 4.( ) 指同一消息作用于不同对象,有不同解释和执行结果。 5.在方法前加 ( ) 关键字,该方法是虚方法。 6.用 ( ) 关键字声明抽象类。 7.C# 不支持类多重继承,可用 ( ) 机制实现类似多重继承的功能。 8.C# 程序执行,从 ( ) 方法开始。 9.方法无返回值时,返回值类型说明符是 ( ) 。 10.静态方法中__________(填“能”或“不能” )使用 this 关键字,因为静态方法不依赖于对象实例。 四、程序分析题(共2题,每题5分,共10分) 1.分析程序运行结果: class Program { static void Main(string[] args) { Dog d = new Dog(); d.Eat(); d.Sleep(); Console.Read(); } } public abstract class Animal { public abstract void Sleep(); public virtual void Eat() { Console.Write("动物吃东西"); } } public class Dog : Animal { public override void Sleep() { Console.Write("狗狗睡觉"); } public override void Eat() { Console.Write("狗狗啃骨头"); } } 2.分析程序运行结果: class BaseClass { public virtual bool Check() { return true; } public virtual string GetInfo() { return "base"; } } class SubClass1 : BaseClass { public override bool Check() { return false; } public override string GetInfo() { return "sub1"; } } class SubClass2 : SubClass1 { new public string GetInfo() { return "sub2"; } } class MainEntry { static void Main() { SubClass2 o = new SubClass2(); SubClass1 q = new SubClass2(); Console.WriteLine(o.Check()); Console.WriteLine(o.GetInfo()); Console.WriteLine(q.GetInfo()); Console.Read(); } } 五、程序填空题(共1题,每题5分,共5分) 1.以下代码定义了一个接口 ISwimable 和一个类 Fish,请补充完整 Fish 类的代码,使其能够正确实现 ISwimable 接口并在 Main 方法中输出鱼游泳的信息。 interface ISwimable { void Swim(); } class Fish : ______________ { public void Swim() { Console.WriteLine("Fish is swimming in the water"); } } class Program { static void Main() { ISwimable fish = new Fish(); fish.Swim; } } 六、程序改错题(共1题,每题5分,共5分) 1. 创建 Bird 对象 new Bird("麻雀") 时,因构造函数中用 base(name) 调用基类带参构造函数,先执行基类 Animal(string name) 构造函数,再执行 Bird 带参构造函数,使程序最终输出结果是“ 动物带参构造 鸟类带参构造 麻雀”。 class Program { static void Main(string[] args) { Bird b = new Bird("麻雀"); Console.ReadLine(); } } public class Animal { public Animal() { Console.Write("动物构造 "); } public Animal(string name) { Console.Write("动物带参构造 "); } } public class Bird : Animal { public Bird() { Console.Write("鸟类构造 "); } public Bird(string name) : base() { Console.Write($"鸟类带参构造 {name} "); } } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

第八章 C#面向对象的编程《算法与程序设计--C#》(河北科学技术出版社)章节过关卷
1
第八章 C#面向对象的编程《算法与程序设计--C#》(河北科学技术出版社)章节过关卷
2
第八章 C#面向对象的编程《算法与程序设计--C#》(河北科学技术出版社)章节过关卷
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。