欢迎来到天天文库
浏览记录
ID:34415362
大小:27.23 KB
页数:7页
时间:2019-03-05
《c#继承、多态、封装、接口等的理解》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、接口: 是隐式公共方法和属性组合起来,以封装特定功能的一个集合。接口不能单独存在,不能像实例化一个类那样实例化接口,但可以建立接口类型的变量。接口不能外含执行其成员的任何代码,而只能定义成员本身,执行过程必须在执行接口的类中实现。abstract和sealed不能在接口中使用,因为这两个修饰符在接口中定义是没有意义的(它们不包含执行代码,所以不能直接实例化,且必须是可以继承的)。接口成员都是公共的。接口没有指定属性应如何存储,所以不能有域。最后,接口与类一样,可以定义为类的成员(但与接口的其他成员不同,因为接口不能包含类型定义)
2、执行接口的类必须包含该接口所有成员的执行代码,且必须匹配指定的签名(包括匹配指定的get和set块)。可以使用virtual或abstract来执行接口成员,但不能用static或const。接口中添加属性 stringName { get; set; }--------------------------------------抽象类: 抽象类可以有抽象成员(没有代码体,且必须在派生类中执行,否则派生类本身必须也是抽象的)和非抽象成员(有代码体,也可以是虚拟的,这样可以在派生类中重写)。抽象的方法
3、可以理解为没有方法体的虚函数。--------------------------------------接口和抽象的区别: 接口成员被定义为公共的,因为它们倾向于外部使用,但抽象类的成员也可以是私有的(只要它们不是抽象的)、受保护的、内部的或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问)。此外,接口不能包含字段、构造函数、析构函数、静态成员或常量。 抽象类主要用作对象系列的基类,共享某些主要特性。接口则主要由类来使用,其中这些类在基础水平上有所不同,但仍可以完成某些相同的任务。 抽象类用于特性,接
4、口用于功能。--------------------------------------继承: 被继承(也称为派生)的类称为父类(也称为基类)。C#中的对象仅能派生于一个基类。只有派生类才能访问一个protected成员。派生类可以提供成员的其它执行代码。这种执行代码不会删除原来的代码,仍可以在类中访问原来的代码,但外部代码不能访问它们。如果没有提供其它执行方式,外部代码就访问基类中成员的执行代码。 注意:虚拟成员不能是私有成员。基类还可以定义为抽象类,抽象类不能直接实例化,要使用抽象类,必须继承这个类。类可以是密封(sealed
5、)的,密封的类不能用作基类,所以也没有派生类。接口也可以派生于其它接口,与类不同的是,接口可以派生多个基接口(以类可以支持多个接口的方式派生)。编译器不允许派生类的可访问性比基类更高,也就是说,内部类可以继承一个公共类,但公共类不能继承一个内部类--------------------------------------多态性: 可以把某个基本类型的变量赋予其派生类型的变量。例AnimalmyAnimal=myCow;//基本类型=派生类型变量然后就可以通过这个变量调用基类的方法,myAnimal.EatFood(),结果是调用派生类
6、中的EatFood()执行代码。注意,不能以相同的方式调用派生类上定义的方法,因为它是基类型变量。但是,可以基本类型的变量转换为派生类变量,调用派生类的方法。CowmyNewCow=(Cow)myAnimal;//把基本类型变量转换为派生类变量myNewCow.Moo();//调用派生类方法接口=派生类,则调用派生类方法,但不可调用未在接口中定义的方法,除非转换派生类对象=(派生类)接口抽象类因为有些实体代码,所在在派生类中要么未定义,要么虚(virtual,虚的话,派生类中必须override,这种情况称为重写,重写则将替换基类和派生类
7、的代码,但在派生类的代码中仍可以用base引用基类),要么定义过(定义过的话,派生类如果要new,则必须加new关键字,这种情况称为隐藏,隐藏的话仍可以通过基类来访问)重写类与隐藏类:隐藏仍可以通过基类来访问,使用new来定义它们。隐藏是覆盖,但仍可以通过将其转换成基类型,引用基类型的方法。new重写是实现了隐藏。重写则将替换基类和派生类的代码,重写是删除,除了在派生类的代码中可以用base引用基类,别的地方都不能。virtual/override是重写。C#中,函数默认情况不是虚拟的,但可以明确声明是虚拟的(构造函数除外)。如果基类函数
8、没有声明为virtual,继承类中要使用与基类签名相同的方法,必须用new关键字声明,否则编译时会有警告(最终效果没区别),都是将基类方法隐藏。如果基类函数声明为virtual,继承类要使用与
此文档下载收益归作者所有