【无标题】

继承
实现继承和接口继承:
在面向对象的编程中,有两种截然不同的继承类型:实现继承和接口继承。

实现继承:表示一个类型派生于一个基类型,它拥有该基类型的所有成员字段和函数。在实现继承中,派生类型采用基类型的每个函数的实现代码,除非在派生类型的定义中指定重写某个函数的实现代码。在需要给现有的类型添加功能,或许多相关的类型共享一组重要的公共功能时,这种类型的继承非常有用。

接口继承:表示一个类型只继承了函数的签名,没有继承任何实现代码。在需要指定该类型具有某些可用的特性时,最好使用这种类型的继承。C#支持实现继承和接口继承。它们都内置于语言和架构中,因此可以根据应用程序的体系结构选择合适的继承。

多重继承:
一些语言支持所谓的“多重继承”,即一个类派生自多个类。使用多重继承的优点是有争议的:
一方面,毫无疑问,可以使用多重继承编写非常复杂、但很紧凑的代码,如CHATL库。另一方面,使用多重实现继承的代码常常很难理解和调试。如前所述,简化健壮代码的编写工作是开发C#的重要设计目标。因此,C#不支持多重实现继承。而C#又允许类型派生自多个接口一-多重接口继承。这说明,C#类可以派生自另一个类和任意多个接口。更准确地说,因为System.Object是一个公共的基类,所以每个C#类都有一个基类,还可以有任意多个基接口。

引用方法:
委托是寻址方法的.NET版本。在C++中,函数指针只不过是一个指向内存位置的指针,它不是类型安全的。我们无法判断这个指针实际指向什么,像参数和返回类型等项就更无从知晓了。而.NET委托完全不同,委托是类型安全的类,它定义了返回类型和参数的类型。委托类不仅包含对方法的引用,也可以包含对多个方法的引用。lambda表达式与委托直接相关。当参数是委托类型时,就可以使用lambda表达式实现委托引用的方法。

委托:
当要把方法传送给其他方法时,需要使用委托。要了解它们的含义,

我们习惯于把数据作为参数传递给方法。给方法传递另一个方法听起来有点奇怪。 而有时某个方法执行的操作并不是针对数据进行的,而是要对另一个方法进行操 作。更麻烦的是,在编译时我们不知道第二个方法是什么,这个信息只能在运行时得 到,所以需要把第二个方法作为参数传递给第一个方法。这听起来很令人迷惑,下 面用几个示例来说明:

启动线程和任务:
在C#中,可以告诉计算机并行运行某些新的执行序列,同时运行当前的任务。这种序列就称为线程,在其中一个基类System.Threading.Thread的一个实例上使用方法Start(),就可以启动一个线程。如果要告诉计算机启动一个新的执行序列,就必须说明要在哪里启动该序列。必须为计算机提供开始启动的方法的细节,即Thread类的构造函数必须带有一个参数,该参数定义了线程调用的方法。

通用库类:
许多库包含执行各种标准任务的代码。这些库通常可以自我包含。这样在编写库时,就会知道任务该如何执行。但是有时在任务中还包含子任务,只有使用该库的客户端代码才知道如何执行这些子任务。例如,编写一个类,它带有一个对象数组,并把它们按升序排列。但是,排序的部分过程会涉及重复使用数组中的两个对象,比较它们,看看哪一个应放在前面。如果要编写的类必须能对任何对象数组排序,就无法提前告诉计算机应如何比较对象。处理类中对象数组的客户端代码也必须告诉类如何比较要排序的特定对象。换言之,客户端代码必须给类传递某个可以调用并且进行这种比较的合适方法的细节

事件:
一般是通知代码发生了什么事件。GUI编程主要处理事件。在引发事件时,运行库需要知道应执行哪个方法。这就需要把处理事件的方法作为一个参数传递给委托。这些将在本章后面讨论。

在C和C++中,只能提取函数的地址,并作为一个参数传递它。C没有类型安全性。可以把任何函数传递给需要函数指针的方法。但是,这种直接方法不仅会导致一些关于类型安全性的问题,而且没有意识到:在进行面向对象编程时,几乎没有方法是孤立存在的,而是在调用方法前通常需要与类实例相关联。所以.NET Framework在语法上不允许使用这种直接方法。如果要传递方法,就必须把方法的细节封装在一种新类型的对象中,即委托。委托只是一种特殊类型的对象,其特殊之处在于,我们以前定义的所有对象都包含数据,而委托包含的只是一个或多个方法的地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值