///
///
///
public string bookName; ///
/// 虚方法,获取书名 ///
public virtual string GetBookName() {
return \这本书名是:\ } }
///
public class NetBook : Book {
///
/// 重写虚方法override ///
public override string GetBookName() {
return bookName; } }
调用:
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) {
NetBook myNetBook = new NetBook();
myNetBook.bookName = \开发案例\ Response.Write(myNetBook.GetBookName());
Book myBook = new NetBook();
myBook.bookName = \基础开发\ Response.Write(myBook.GetBookName());
Book myBaseBook = new Book();
myBaseBook.bookName = \基础开发\ Response.Write(myBaseBook.GetBookName()); }
}
答案:asp.net开发案例
asp.net基础开发
这本书名是:asp.net基础开发
31、 阅读下面的代码,写出运行结果。(难易度:很难;知识点:继承)(abstract class Person {
public abstract void Speak(); }
class Animal {
public virtual void EatFood() {
Console.WriteLine(\ } }
class Man : Person {
public override void Speak() {
Console.WriteLine(\ } }
class Dog : Animal { }
class Cat : Animal {
public override void EatFood() {
Console.WriteLine(\ } }
static void Main(string[] args)
{
Man man = new Man(); man.Speak();
Dog dog = new Dog(); dog.EatFood();
15分)
Cat cat = new Cat(); cat.EatFood();
Console.ReadLine(); }
答案:The man is speaking! The animal is eating!
The cat is eating!
32、 (难易度:很难;知识点:继承)(20分)简易学生信息管理(用抽象类实现多态) 编写一个应用程序,利用方法的重写和多态性进行学生信息的简单管理,输出类似如下格式的学生信息:(高职学生输出总成绩;成教学生输出总学分)。
王静:高职类2年级学生,总成绩:248 刘丽:成教类1年级学生,总学分:26
说明:(1) 定义一个抽象类Students,在其中添加6个属性,分别对应于学生类别、姓名、进校年数、基础课成绩、专业课成绩、实训课成绩; 1个方法,计算总成绩;1个抽象方法,用于显示学生信息。
(2) 定义1个派生类StudentA,继承自抽象类,用于实现“高职”类学生信息的处理,在其中实现基类的抽象方法。
(3) 定义1个派生类StudentB,继承自抽象类,用于实现“成教”类学生信息的处理,在其中实现基类的抽象方法,并添加计算总学分的方法。
(4) 总成绩 = 基础课+专业课+实训课 总学分 = 总成绩 / 10
总学分为整数
接口、委托(共10题,占7%)
1. (难易度:简单;知识点:接口)(10分)创建接口ICalculator,声明求两个整数的
差的方法diff();创建类Calculator类,实现接口ICalculator;在应用程序中创建一个Calculator类对象,调用diff ()方法,输出两个数的差。
2. (难易度:很难;知识点:接口)(15分)定义一个接口IEmployee,包含计算基础工
资的成员方法baseSalary();添加一个管理员实现类Manager和生产员工实现类Producter。要求用反射机制,在程序中动态创建管理员或生产员工的实例,输出其基本工资。
3. (难易度:较难;知识点:接口)(15分)编写接口IAddition,定义add方法,返回
string,参数是两个int类型,编写此接口的两种实现,一种是将参数相加后输出,一种是相连后输出。
4. (难易度:较难;知识点:接口)(15分)定义一个接口IPass,有checkPass方法,
返回布尔值,参数name、pass。定类AdminPass实现接口,要求只要用户名是“admin”,密码是123就返回true,否则返回false
5. (难易度:很难;知识点:接口)(20分)简易电灯管理系统(用接口实现多态)
某学院有很多房屋,每间屋都有照明灯,校园内还有很多路灯,但不管是哪里的灯,对其都有开、关两种操作。学院拟采用自动化控制灯的开关,正常情况下
教室里的灯:一旦有人就开,否则就关;
校园里的路灯:早上6点以后就关,晚上8点以后就开。
现创建一个应用程序,模拟实现上述检测功能。
要求:
(1)创建一个接口ILamp,包含有方法Open() 、Close()
(2)创建一个类ClassRoom,管理教室里的灯,按学院要求实现接口的两个方法 (3)创建一个类SchoolGarden,管理校园里的路灯,按学院要求实现接口的两个方法
6. (难易度:较难;知识点:接口)(10分)接口和类有什么区别?
答:接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念! 而类是负责功能的具体实现!
在类中也有抽象类的定义,抽象类与接口的区别在于:
抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化。
但接口是一个行为的规范,里面的所有东西都是抽象的! 一个类只可以继承一个基类也就是父类,但可以实现多个接口。
7. (难易度:简单;知识点:接口)(10分)描述接口的作用。
充当类的功能界面,接口里的成员属于抽象描述,必须通过类的实现才能使用。如:某个项目有多个模块组成,每个模块由一个开发者完成,开发者只需编写完模块功能实现后,留下的接口供其他人使用。其他人在程序中,使用接口时,只需知道接口的功能,不了解如何实现。
当功能模块无法满足需要或功能模块的需求变更时,程序员只需将该功能模块的实现代码进行修改和扩充,而其他调用接口的程序无须改动。接口的这种应用模式成为brige模式(即意图和实现分离)
接口反映了面向对象的多态特征,即通过相同方法得到不同实现。接口也反映了面向对象的封装特征,使用者可以不清楚接口成员的实现细节。
注意:因为接口成员默认的访问权限是public,所以在实现接口时,类的成员必须为public,且方法名和参数必须一致。
8. (难易度:简单;知识点:接口)(10分)Abstract、 class和interface有什么区
别?
相同点:
都不能被直接实例化,都可以通过继承实现其抽象方法。 都是面向抽象编程的技术基础,实现了诸多的设计模式。 不同点:
接口支持多继承;抽象类不能实现多继承。
接口只能定义抽象规则;抽象类既可以定义规则,还可能提供已实现的成员。 接口是一组行为规范;抽象类是一个不完全的类,着重族的概念。 接口可以用于支持回调(CallBack);抽象类不能实现回调,因为继承不支持。 接口只包含方法(Method)、属性(Property)、索引器(Index)、事件(Event)的签名,但不能定义字段和包含实现的方法;
抽象类可以定义字段、属性、包含有实现的方法。
接口可以作用于值类型(Struct)和引用类型(Class);抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。
9. (难易度:较难;知识点:接口)(10分)在项目中为什么使用接口?接口的好处是
什么?什么是面向接口开发?
接口只是一种约束。使用 interface 去定义某些特定的功能,为的是不要将代码写死在自定义类里,以便在系统开发、事后维护、功能扩充 上更有扩展性。
接口用于描述一组类的公共方法/公共属性. 它不实现任何的方法或属性,只是告诉继承它的类至少要实现哪些功能,继承它的类可以增加自己的方法. 使用接口可以使继承它的类: 命名统一/规范,易于维护。提供永远的接口。 当类增加时,现有接口方法能够满足继承类中的大多数方法,没必要重新给新类设计一组方法,也节省了代码,提高了开发效率。 面向接口开发的好处有结构清晰,类间通信简单易懂,扩展性好,提高复用性等等。 面向接口开发就是指面向抽象协议编程,实现者在实现时要严格按协议来办。
10. (难易度:很难;知识点:委托)(15分)下列代码的运行结果是什么。
using System;
public delegate void BuyTicketDelegate(string num); public class Student {
public event BuyTicketDelegate blEvent; public Student(string num) {
blEvent += new BuyTicketDelegate(this.BuyTicket); }
public void ShowNum(string num) {
blEvent(num); }
private void BuyTicket(string num) {
Console.WriteLine(\我要买\次车票\ }
static void Main() {
Console.WriteLine(\创建学生对象\ Student stu = new Student(\ Console.WriteLine(\创建完毕\ stu.ShowNum(\ } }
答案: 创建学生对象 创建完毕
[完成]字符串(共3题,占2%)
1. (难易度:较难;知识点:字符串)(10分)请问: String类与StringBuilder类有
什么区别?为什么在.Net类库中要同时存在这2个类?
在进行累加操作时,StringBuilder利用Append方法实现,拥有比string快很多的优势,累加次数越多,优势越明显。对于string类型系统先是把两个字符串写入内存,接