1、面向对象程序设计习题库选择题1. 一个设计得好的面向对象系统具有( D)特征。A 低内聚、低耦合 B 高内聚、低耦合 C 高内聚、高耦合 D 低内聚、高耦合2. 面向对象程序设计的特点主要概括为(C) 。A 可分解性、可组合性、可分类性 B 继承性、封装性、多态性C 抽象封装性、继承性、多态性 D 封装性、易维护性、可扩展性、可重用性3. 关于 C#程序的书写,下列不正确的说法是 ( D )。A. 区分大小写 B. 一行可以写多条语句C. 一条语句可写成多行D. 一个类中只能有一个 Main()方法,因此多个类中可以有多个 Main()方法4. 关于 C#语言的基本语法,下列哪些说法正确的是(
2、 C )A. C#语言使用 using 来引用需要用到的命名空间;B. 用 C#编写的程序中,Main 函数是唯一允许的全局函数;C. C#语言中使用的名称严格区分大小写;D. C#中一条语句必须写在一行内;5 以下标识符中,正确的是(A ) 。A. _nName B. typeof C. 6b D. x5#6.字符串连接运算符包括 则下列正确的数组元素的引用是_C_。A. a(3,4) B. a(3)(4) C. a34 D. a3,415. 在 C#编制的财务程序中,需要创建一个存储流动资金金额的临时变量,则应使用下列哪条语句?( A ) A. decimal theMoney; B. i
3、nt theMoney; C. string theMoney; D. double theMoney; 16. 在 C#中,表示一个字符串的变量应使用以下哪条语句定义?( B ) A. CString str; B. string str; C. Dim str as string D. char * str; 17. C#中每个 int 类型的变量占用( C )个字节的内存。A. 1 B. 2 C. 4 D. 8 18.假定一个 10 行 20 列的二维整型数组,下列哪个定义语句是正确的( C ) 。A. int arr = new int10,20 B. int arr = int ne
4、w10,20C. int , arr = new int10,20 D. int , arr = new int20;1019. 枚举型常量的值不可以是( D )类型A. int B. long C. ushort D. doule20.引用类型主要有 4 种:类类型、数组类型、接口类型和( C ) 。A.对象类型 B.字符串类型 C.委托类型 D.整数类型21. 分析下列语句:namespace TestCS public delegate void Hello(string target);该语句的作用是:( D )A. 在 TestCS 命名空间中定义了一个名为 Hello 的全局方法;
5、B. 在 TestCS 命名空间中声明了函数 Hello 的原型;C. 在 TestCS 命名空间中定义了一个名为 Hello 的函数指针;D. 在 TestCS 命名空间中定义了了一个名为 Hello 的委托类型;22. 以下关于 for 循环的说法不正确的是 ( A )。A. for 循环只能用于循环次数已经确定的情况B. for 循环是先判定表达式,后执行循环体语句C. for 循环中,可以用 break 语句跳出循环体D. for 循环体语句中,可以包含多条语句,但要用花括号括起来。23下面对异常说法不正确的是( D )Atry/catch 块为基本引发异常的组合B在捕获异常时,可以有
6、多个 catch 块C无论异常是否发生,finally 块总会执行Dtry 块和 finally 不能连用24. C#程序中,可使用 trycatch 机制来处理程序出现的( B )错误。A. 语法 B. 运行 C. 逻辑 D. 拼写25. 为了能够在程序中捕获所有的异常,在 catch 语句的括号中使用的类名为( A )_。A. Exception B. DivideByZeroException C. FormatException D. 以上三个均可26. C#源程序文件的默认扩展名为( C )。A. cpp B. exe C. cs D. lik27. 下列的( D )不是构造函数的特
7、征。A. 构造函数的函数名和类名相同B. 构造函数可以重载C. 构造函数可以带有参数D. 可以指定构造函数的返回值28.类的析构函数的作用是( D )A.一般成员函数 B.类的初始化C.对象的初始化 D.释放资源29.类的析构函数是在( C )调用的。A.类创建时 B.创建对象时C.销毁对象时 D.不自动调用30. 在 C#程序中,可以使用( A )属性来引用处于非托管代码环境中的函数。A. DllImport B. Conditional C. STAThread D. SecureMethod 31对托管代码与非托管代码之间的区别描述正确的是( D ) 。A. 非托管代码依赖于 CLR 提
8、供的服务,而托管代码不需要B. 托管代码生成的应用程序为目标机器上可执行文件,非托管代码生成的应用程序为中间语言文件C. 托管代码和非托管代码之间没有区别D.托管代码依赖于 CLR 提供的服务,而非托管代码不需要32在 System.IO 命名空间中( C )类是实现创建、移动、枚举目录和子目录的实例方法。ADiretory BFile CDirectoryInfo DFileInfo 33下面对程序集和命名空间说法正确的是( B ) 。A. 一个程序集只能引用一个命名空间B. 一个程序集可以引用多个命名空间,一个命名空间也可以保存在多个程序集中C. 一个程序集可以引用多个命名空间,但一个命名
9、空间只能保存在一个程序集中D. 一个命名空间可以保存在多个程序集中,命名空间无法包含另外的命名空间34.( C )命名空间中的类和接口用于创建 Web 应用程序的页面?A. System.Drawing B. System.IO C. System.Web.UI D. System.Web.Service 35. ADO.NET 使用( B )命名空间的类访问 SQL Server 数据库中的数据。A. System.Data.OleDb B. System.Data.SqlClientC. System.Xml.Serialization D. System.IO 36构成对象的两个主要因素
10、是( A ) 。A 属性和操作 B 标识和内容 C 继承和多态 D 消息和封装37下面的修饰符中( C )不是访问修饰符。Apublic Bprotected Cnew Dinternal38. 在类的定义中,类的( B )描述了该类的对象的行为特征。A. 类名 B. 方法 C. 所属的名字空间 D. 属性39.有关类和对象的说法不正确的是(B) 。A)对象是类的实例 B)一个类只有一个对象C)任何一个对象只能属于一个类 D)类与对象的关系和数据与变量的关系相似E)类是抽象的,对象是具体的40. 以下类 MyClass 的属性 count 属于( B )属性.class MyClassint
11、i;int countget return i; A. 只写 B. 只读 C. 可读写 D. 不可读不可写41. 根据下面的代码,可以确定类 A 与类 B 之间存在( A )关系。public class A private B theB;public void aMethod() theB.doSomthing(); A 关联 B 泛化 C 实现 D 包含42.继承机制的作用是( D )A.信息隐藏 B.数据封装C.定义新类 D.数据抽象43 已知类 B 是由类 A 继承而来,类 A 中有一个为 M 的非虚方法,现在希望在类 B 中也定义一个名为 M 的方法,若希望编译时不出现警告信息,则在
12、类 B 中声明该方法时,应使用( B )方法。A. static B. new C. override D. virtual44.类的以下特性中,可以用于方便地重用已有的代码和数据的是( C ).A.多态 B.封装 C.继承 D.抽象45. 在 ADO.NET 中,执行数据库的某个操作,则至少需要创建( A )并设置它们的属性,调用合适的方法:A. 一个 Connection 对象和一个 Command 对象B. 一个 Connection 对象和 DataSet 对象C. 一个 Command 对象和一个 DataSet 对象D. 一个 Command 对象和一个 DataAdapter 对
13、象46下列说法中对 Mdi 子窗体描述正确的是( D )A设置 MdiChildForm 属性为 trueB设置 MdiChild 属性为 falseC设置 MdiChild 属性为 trueD设置 MDI 子窗体 MDiParent 属性引用父窗体实例47. 使用派生类的主要原因是( A ) 。A 提高代码的可重用性 B 提高程序的运行效率C 加强类的封装性 D 实现数据的隐蔽48、如果一个类至少有一个抽象方法,那么就称该类为( A )。A 抽象类 B 接口类 C 密封类 D 所有类49、在 C#语言中引入泛型,是为了提高 ( D )。A 程序运行效率 B 程序通用性C 类的安全性 D 以上
14、三个方面50.以下( D ) 对接口方法的陈述是正确的A 可以是静态的 B 可以是公有的C 可以是任何访问限制 D 以上都不对填空题1、常用的面向对象的程序语言有:C+、 、等。 参考答案:java c#2定义方法时使用的参数是 ,调用方法时使用的参数是 。参考答案:形参 实参3数据类型说明符用来说明方法返回值的类型,如果没有返回值,则其类型说明符应为 。 参考答案:void4、在 C#中,进行注释有两种方法:使用 / 和使用/* */符号对,其中 只能进行单行注释。 参考答案:/5、使用泛型类型可以最大限度地重用代码、 以及 。 参考答案:保护类型的安全 提高性能6、 C#数组元素的下标从
15、开始。参考答案:07.设 x 为 int 型变量,请写出描述“x 是奇数”的 C#语言表达式 。参考答案: x%2=18已知字符串 str 的值为“abcdefgh”,则表达式 str.Substring(1,3)的值为 。参考答案:bcd9. 当在程序中执行到 语句时,将结束本层循环类语句或 switch 语句的执行。 参考答案:break10. 当在程序中执行到_语句时,将结束所在循环语句中循环体的一次执行。参考答案:continue11. 在 switch 语句中,在分支的最后应有一个 选项。 参考答案:default12. 在 C#语言中,实现从群集中取出每一个元素的循环语句是 。参考
16、答案:foreach一个命名空间除了可包含其他命名空间外,还可包含 、 、 、枚举、委托等成员。 参考答案:类 结构 接口13.NET Framework 包括三个主要部分: 、 和 。参考答案:公共语言运行库 类库 应用模板14、在.NET 中所有类的基类是 。参考答案:Object15、抽象模型越简单,它就 ,也就越具有普遍性。抽象模型越复杂,就越 。参考答案:越抽象 具体16、在学习新东西时,大脑会自动搜寻以前创建和掌握的抽象/模型,以资借鉴。这种进行特性对比,找到可供重用的近似抽象的过程又称为 和 。参考答案:模式匹配 模式重用17、委托是一种数据类型,它的作用是 。参考答案:允许在运
17、行时选择要调用哪些函数。18.传入某个属性(访问器结构)的 SET 方法的隐含参数的名称是 。参考答案:value 19、在面向对象的结对关系有三种,分别是: 和 、 。参考答案要点:一对一 一对多 多对多20、在.NET 中表示接口的关键字是 。参考答案:interface21、接口可由 、 、事件、索引器或这四种成员类型的任意组合构成。接口不能包含 。参考答案:方法 属性 字段22、在类中若要实现接口成员,类中的对应成员必须是 、 ,并且与接口成员具有相同的名称和签名。参考答案:公共的 非静态的23、在 ADO.NET 中的对象有 、 和 DataSet 等。参考答案:SqlConnect
18、ion SqlCommand24、常用的 SQL 操作语句有 、 、 和 Delete 等。参考答案:Select 、 Update 、Insert25Timer 控件的 属性用来设置定时器 Tick 事件发生的时间间隔。参考答案:Interval26、用以说明类中私有成员的关键字是 。参考答案:(private)27、对类的实例数据成员的访问格式为对象名 。参考答案:(.数据成员名)28、类有两种用法,一种是用于 ,另一种是通过 派生新的类。参考答案:(定义对象,继承或派生)29 静态成员在类中有两种情况,即 和 。参考答案:(静态成员函数,静态数据成员。可以颠倒)30. 根据类的赋值兼容原
19、则,派生类对象可以赋给 的变量。参考答案:(基类)31 异常处理 ,就是针对软件的外部环境出现意外和 所作出的适当处理。参考答案:(错误)32. 静态构造函数是通过 来调用的。参考答案:(类)简答题1. 简述面向对象程序设计的三要素。参考答案要点:在上述面向对象的基本概念基础之上,不可避免地要涉及到面向对象程序设计所具有的 3 个共同特征:用户定义类型、继承和多态性。用户定义类型提供一种表达真实世界的直观代码,便于重用,减少代码量。继承:不修改代码的条件下进行扩展,派生类较为短小,编写(维护)更少;多态如何使同一个消息被不同类型的对象响应。2. 简述面向对象程序设计的抽象和封装。参考答案要点:
20、抽象是人们认识事物的常用方法,比如地图的绘制。抽象的过程就是如何简化、概括所观察到的现实世界,并为人们所用的过程。抽象包括对象的状态与行为,对应到类的属性与方法。抽象出来的属性通过封装可以减少数据冗余,进行信息隐藏和保护数据完整性。3. 类与对象有什么关系?参考答案要点:类是一种用户自定义的数据类型.对象是使用自定义的类名在程序中说明变量.或者说;具有类类型的变量即为对象.类是创建对象的样板;对象是类的实例。4. 判断下列类之间的关系,把它们分别列入 A 聚合 B 继承 C 关联 D 都不是这四类中。1大学 学院 2学生 课程 3学生 大一新生 4汽车 车门 5货车 交通工具 6公共汽车 车站
21、 7工具条 按钮 8汽车发动机 汽车9员工 公司 10本科生 研究生参考答案:聚合:1 4 7 8继承:5 10关联:2 6 9都不是:35. 面向对象软件开发方法的目标参考答案要点:封装性、易维护性、可扩展性、可重用性6. 简述数据类型的“强类型 “。参考答案要点:为所有变量指定数据类型称为“强类型” 。使用强类型有以下优点: 它为变量启用智能提示(IntelliSense )支持。 这允许您在输入代码时看到变量的属性和其他成员。 它会运用编译器类型检查。这将捕捉到因溢出等错误而在运行时失败的语句。这也可以在不支持方法的对象上捕捉对方法的调用。 使代码的执行速度更快。7. 简述 C# 语言的
22、优点参考答案要点: 完全面向对象的设计。 强类型安全。 很好地融合了高级语言的简明性和 C+ 的强大功能。 垃圾回收。 类似于 C 和 C+ 的语法和关键字。 使用委托取代函数指针,从而增强了类型安全和安全性8. 简述 C#语言中的过程重载参考答案要点:重载过程是指使用相同的名称和不同的参数列表在多个版本中定义某个过程。重载的目的是定义过程的若干个密切相关的版本,而不需要通过名称来区分它们,可通过改变参数列表达到此目的。重载版本必须在以下至少一个方面不同于所有其他重载版本: 参数的数量 参数的顺序 参数的数据类型 类型参数的数量(适用于泛型过程) 返回类型(仅适用于转换运算符)9. 简述在 C
23、# 语言中关键字 new 的用途并举例。参考答案要点:在 C# 中,new 关键字可用作运算符、修饰符或约束。new 运算符 :用于创建对象和调用构造函数。new 修饰符 :用于向基类成员隐藏继承成员。new 约束 :用于在泛型声明中约束可能用作类型参数的参数的类型。10. 关键字 this 的意义和用法?参考答案要点:this 关键字引用类的当前实例,还可用作扩展方法的第一个参数的修饰符。this 的常用用途: 限定被相似的名称隐藏的成员 将对象作为参数传递到其他方法声明索引器由于静态成员函数存在于类一级,并且不是对象的一部分,因此没有 this 指针。 在静态方法中引用 this 是错误的
24、。 11. 关键字 base 的意义和用法?参考答案要点:tbase 关键字用于从派生类中访问基类的成员: 调用基类上已被其他方法重写的方法。指定创建派生类实例时应调用的基类构造函数。基类访问只能在构造函数、实例方法或实例属性访问器中进行。从静态方法中使用 base 关键字是错误的。 所访问的基类是类声明中指定的基类。12. 简述 C# 程序的通用结构参考答案要点:C# 程序可由一个或多个文件组成。每个文件都可以包含零个或零个以上的命名空间。一个命名空间除了可包含其他命名空间外,还可包含类、结构、接口、枚举、委托等类型。在某一个类中必须而且只能有一个静态的 Main 方法作为程序的入口。下面是
25、一个程序的框架结构,它包含所有这些元素种类。 / A skeleton of a C# program using System;namespace YourNamespaceclass YourClassstruct YourStructinterface IYourInterface delegate int YourDelegate();enum YourEnum namespace YourNestedNamespacestruct YourStruct class YourMainClassstatic void Main(string args) /Your program sta
26、rts here.13. 简述中类的成员参考答案要点:类和结构具有表示其数据和行为的成员。成员 说明字段 字段是被视为类的一部分的对象的实例,通常用于保存类数据。例如,日历类可能具有一个包含当前日期的字段。属性 属性是类中可以像类中的字段一样访问的方法。属性可以为类字段提供保护,以避免字段在对象不知道的情况下被更改。方法 方法定义类可以执行的操作。方法可以接受提供输入数据的参数,并且可以通过参数返回输出数据。方法还可以不使用参数而直接返回值。事件 事件向其他对象提供有关发生的事情(如单击按钮或成功完成某个方法)的通知。事件是使用委托定义和触发的。有关更多信息,请参见事件和委托。运算符 运算符是
27、对操作数执行运算的术语或符号,如 +、*、类,并与 ArrayList 进行比较。参考答案要点:List类是 ArrayList 类的泛型等效类。 该类使用大小可按需动态增加的数组实现 IList 泛型接口。 ArrayList 是一种.NET Framework 提供得预定义集合类,用于数据存储和检索对象的专用容器类。这些类一般支持堆栈、队列、列表和哈希表等常用数据结构。在决定使用 List类还是使用 ArrayList 类(两者具有类似的功能)时,使用泛型集合会稍微增加了些编码的复杂性,但好处是您可以创建一个比 ArrayList 更安全并且速度更快的列表。List类在大多数情况下执行得更
28、好并且是类型安全的。18. 简述 C#语言中类的属性成员。参考答案要点:属性是类的一种成员:它们提供灵活的机制来读取、设置或计算私有字段的值。可以像使用公共数据成员一样使用属性,但实际上它们是称作“访问器” 的特殊方法对字段进行封装,有助于提高方法的安全性和灵活性。属性使类能够以一种公开的方法获取和设置值,同时隐藏实现或验证代码。不实现 set 方法的属性是只读的。对于不需要任何自定义访问器代码的简单属性,可考虑选择使用自动实现的属性。19. 简述关键字 static。参考答案要点:使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员。static 修饰符可用于类、字段、方法
29、、属性、运算符、事件和构造函数,但不能用于索引器、析构函数或类以外的类型。静态类和类成员用于创建无需创建类的实例就能够访问的数据和函数。静态类成员可用于分离独立于任何对象标识的数据和行为:无论对象发生什么更改,这些数据和函数都不会随之变化。当类中没有依赖对象标识的数据或行为时,就可以使用静态类。工具类一般都是静态类。即使没有创建类的实例,也可以调用该类中的静态方法、字段、属性或事件。如果创建了该类的任何实例,不能使用实例来访问静态成员。只存在静态字段和事件的一个副本,静态方法和属性只能访问静态字段和静态事件。静态成员通常用于表示不会随对象状态而变化的数据或计算;例如,数学库可能包含用于计算正弦
30、和余弦的静态方法。 静态方法可以被重载,但不能被重写。20. 简述 C#语言中 ref 和 out 的作用及区别。参考答案要点:ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。尽管作为 out 参数传递的变量不必在传递之前进行初始化,但需要调用方法中实例化以便在方法返回之前赋值。尽管 ref 和 out 在运行时的处理方式不同,但在编译时的处理方式相同。因此,如果一个方法采用 ref 参数,而另一个方法采用 o
31、ut 参数,则无法重载这两个方法。例如,从编译的角度来看,以下代码中的两个方法是完全相同的。21. 简述.NET Framework,包括目的、组成及功能。参考答案要点:.NET Framework 的目的是便于开发商更容易地建立网络应用程序和 Web服务,它的关键特色是提供了一个多语言组件开发和执行的环境。从层次结构来看,.NET Framework 又包括三个主要组成部分:通用语言运行环境(Common Language Runtime)、类库、应用模板主要包括面向 Web 的网络应用程序模板(Web Forms 或 Web Services)和Windows 应用程序模板(Win For
32、ms)。其中通用语言运行环境在组件运行时,负责管理内存分配、启动和中止线程和进程、强化安全系数,同时还调整任何该组件涉及到的其他组件的附件配置。在通用语言运行环境上是类库框架,它为开发人员提供了一套能够被任何现代编程语言调用的、统一的面向对象、异步、层次结构的可扩展类库,包括集合、输入/输出、字符串、图画、网络、线程、全球化、安全加密、数据库访问、调试相关服务等类库。在服务框架之上是两种应用类型的模板,一类是传统的 Windows 应用程序模板,另一类是基于 ASP.NET 的 Web 网络应用程序模板。其中 ASP.NET以一组控件和体系结构的方式提供了一个 Web 应用模型,由.NET 框
33、架提供的类库构建而成,通过它可以简化 Web 应用的实现过程。22. 简述 C#中的垃圾回收技术参考答案要点:.NET Framework 的垃圾回收器管理应用程序的内存分配和释放。每次您使用 new 运算符创建对象时,运行库都从托管堆为该对象分配内存。只要托管堆中有地址空间可用,运行库就会继续为新对象分配空间。但是,内存不是无限大的。最终,垃圾回收器必须执行回收以释放一些内存。对象在创建后,只有一个引用是指向对象的,随着代码的执行,垃圾回收器会跟踪对象的引用数量。每增加一个引用,计数器加 1。当引用离开作用域以后,计数器就减少。当引用计数器达到 0 时,就将该对象和对象所占用的内存标记为回收
34、。当垃圾回收器执行回收时,它检查托管堆中不再被应用程序使用的对象并执行必要的操作来回收它们占用的内存。23. 简述 C#的类有五种不同的限制修饰符 参考答案: public 可以被任意存取 protected 只可以被本类和其继承子类存取 internal 只可以被本程序集(Assembly)内所有的类存取,程序集是 C#语言中类被组合后的物理单位,其编译后的文件扩展名往往是“.DLL”或“.EXE ”。 protected internal 唯一的一种组合限制修饰符,它只可以被本组合体内所有的类或这些类的继承子类所存取。 private 只可以被本类所存取。 24. ADO.NET 中常用的
35、对象有哪些?分别描述一下。参考答案要点: Connection 对象:用于连接数据库的对象,表示到数据源的一个唯一的连接。 Command 对象:表示要对数据库执行的一个 SQL 语句或一个存储过程。 DataReader 对象:数据库查询返回的数据对象,它与 DataSet 最大的不同是使用 DataReader 以只进、只读方式返回数据,从而提高应用程序的性能。 DataSet 对象:表示内存中数据的缓存,可以把它想像成一个临时的数据库,它里可以存多个表(DataTable)。 DataAdapter 对象:该对象是与 DataSet 配合使用的对象,用于把表填充到 DataSet 和更新
36、 DataSet 等。25. 简要概述 C#语言中的泛型参考答案: 使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。 泛型最常见的用途是创建集合类。 .NET Framework 类库在 System.Collections.Generic 命名空间中包含几个新的预定义泛型集合类。尽可能地使用这些类来代替普通集合类,如 System.Collections 命名空间中的 ArrayList。 您可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。 可以对泛型类进行约束以访问特定数据类型的方法。 关于泛型数据类型中使用的类型的信息可在运行时通过使用反射获取。四 、 计
37、算 题 (每 题 8分 , 共 24分 )1 . using System;namespace P3_2 class Program static void Main() ComplexNumber c1 = new ComplexNumber(); c1.a = 1.5;c1.b = 3;ComplexNumber c2 = c1; c2.a = c2.b;Console.Write(“c1 = “);c1.Write();Console.Write(“c2 = “);c2.Write();Console.ReadLine(); class ComplexNumber public doub
38、le a;public double b;public void Write() Console.WriteLine(“0+1i“, a, b); 运 行 结 果 :2. using System;namespace P5_2 class Program static void Main() Truck t1 = new Truck();Console.WriteLine(“卡 车 速 度 0公 里 /小 时 “, t1.Speed);Console.WriteLine(“卡 车 行 驶 1000公 里 需 0小 时 “, t1.Run(1000);Automobile a1 = t1;Con
39、sole.WriteLine(“汽 车 速 度 0公 里 /小 时 “, a1.Speed);Console.WriteLine(“汽 车 行 驶 1000公 里 需 0小 时 “, a1.Run(1000);Console.ReadLine(); public class Automobile protected float speed;public float Speed get return speed; set speed = value; private float weight;public float Weight get return weight; set weight =
40、value; public float Run(float distance) return distance / speed; public class Truck : Automobile private float load;public float Load get return load; set load = value; public new float Speedget return speed / (1 + load / Weight / 2); public Truck() load = 30;speed = 50;Weight = 15;public new float
41、Run(float distance) return (1 + load / Weight / 2) * base.Run(distance); 运 行 结 果 :3. mespace P10_2 class Program static void Main() BankAccount a1 = new BankAccount(1000, true);IPayable p1 = a1;Console.WriteLine(“p1付 款 1100: “ + (p1.Pay(1100) ? “成 功 “ : “失 败 “);Console.WriteLine(“a1付 款 1100: “ + (a1
42、.Pay(1100) ? “成 功 “ : “失 败 “);a1 = new CreditCard(1000);Console.WriteLine(“a1付 款 1100: “ + (a1.Pay(1100) ? “成 功 “ : “失 败 “);Console.ReadLine();public interface IPayable bool Pay(decimal money);public class BankAccount : IPayable private bool vip = false;protected decimal balance = 0;public BankAccou
43、nt(decimal balance, bool vip) this.balance = balance;this.vip = vip;bool IPayable.Pay(decimal money) if (balance = money) balance -= money;return true;elsereturn false;public virtual bool Pay(decimal money) IPayable p1 = (IPayable)this;if(!vip)return p1.Pay(money);elsereturn p1.Pay(money * 0.9M); pu
44、blic class CreditCard : BankAccount private decimal credit;public CreditCard(decimal credit): base(0, true) this.credit = credit;public override bool Pay(decimal money) if (money p1 = new Pair(0);p1.SetValue(5);Console.WriteLine(p1.Left); Console.WriteLine(p1.Right); Pair p2 = new Pair(“);p2.SetValu
45、e(5); p2.SetValue(“王 小 红 “);Console.WriteLine(p2.Left);Console.WriteLine(p2.Right); public class Pairpublic int Left;public T Right;public Pair(T right) Right = right; public void SetValue(int i) Left = i;public void SetValue(T t) Right = t; 运 行 结 果 :9. using System;namespace P6_4 class Program stat
46、ic void Main() TrafficLight light = new TrafficLight();Car car1 = new Car();car1.Enter(light);Ambulance amb1 = new Ambulance();amb1.Enter(light);light.ChangeColor();light.ChangeColor();amb1.Emergent = true;light.ChangeColor();Console.ReadLine(); public delegate void LightEvent(bool color);public class TrafficLight private bool color = false;public bool Color get return color; public event LightEvent OnColorChange; public void ChangeColor() color = !color;Console.WriteLine(color ? “红 灯 亮 “ : “绿 灯 亮 “);if (OnColorChange != null)OnColorChange(color); public