《2022年C#抽象类及其 .pdf》由会员分享,可在线阅读,更多相关《2022年C#抽象类及其 .pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C#抽象类及其方法一、解释1 在 C#中使用关键字abstract 来定义抽象类和抽象方法。不能初始化的类被叫做抽象类,它们只提供部分实现,但是另一个类可以继承它并且能创建它们的实例。一个包含一个或多个纯虚函数的类叫抽象类,抽象类不能被实例化,进一步一个抽象类只能通过接口和作为其它类的基类使用.-C+Programming Language by Stroustrup Chapter13.2 抽象类能够被用于类,方法,属性,索引器和事件,使用abstract 在一个类声明中表示该类倾向要作为其它类的基类成员被标示成abstract,或被包含进一个抽象类,必须被其派生类实现。abstract c
2、lass ShapesClass abstract public int Area();class Square:ShapesClass int x,y;/Not providing an Area method results/in a compile-time error.public override int Area()return x*y;例如,一个包含非抽象方法的抽象类:abstract class MyAbs public void NonAbMethod()Console.WriteLine(Non-Abstract Method);名师资料总结-精品资料欢迎下载-名师精心整理
3、-第 1 页,共 8 页 -class MyClass:MyAbs class MyClient public static void Main()/MyAbs mb=new MyAbs();/not possible to create an instance MyClass mc=new MyClass();mc.NonAbMethod();/Displays Non-Abstract Method 一个抽象类可以包含抽象和非抽象方法,当一个类继承于抽象类,那么这个派生类必须实现所有的的基类抽象方法。一个抽象方法是一个没有方法体的方法。abstract class MyAbs public
4、 void NonAbMethod()Console.WriteLine(Non-Abstract Method);public abstract void AbMethod();/An abstract method class MyClass:MyAbs/must implement base class abstract methods public override void AbMethod()Console.WriteLine(Abstarct method);class MyClient public static void Main()MyClass mc=new MyClas
5、s();mc.NonAbMethod();mc.AbMethod();名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 8 页 -但是通过声明派生类也为抽象,我们可以避免所有或特定的虚方法的实现,这就是抽象类的部分实现。abstract class MyAbs public abstract void AbMethod1();public abstract void AbMethod2();/not necessary to implement all abstract methods/partial implementation is possible abstract clas
6、s MyClass1:MyAbs public override void AbMethod1()Console.WriteLine(Abstarct method#1);class MyClass:MyClass1 public override void AbMethod2()Console.WriteLine(Abstarct method#2);class MyClient public static void Main()MyClass mc=new MyClass();mc.AbMethod1();mc.AbMethod2();在 C#中,一个抽象类能够继承另一个非抽象类,另外,继
7、承了基类的方法,添加新的抽象和非抽象方法是可行的。class MyClass1/Non-Abstract class public void Method1()名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 8 页 -Console.WriteLine(Method of a non-abstract class);abstract class MyAbs:MyClass1/Inherits from an non-abstract class public abstract void AbMethod1();class MyClass:MyAbs/must implement
8、base class abstract methods public override void AbMethod1()Console.WriteLine(Abstarct method#1 of MyClass);class MyClient public static void Main()MyClass mc=new MyClass();mc.Method1();mc.AbMethod1();一个抽象类也能从一个接口来实现,这种情况,我们必须为所有的方法提供方法体,这些方法是来自接口interface IInterface void Method1();abstract class My
9、Abs:IInterface public void Method1()Console.WriteLine(Method implemented from the IInterface);class MyClass:MyAbs/must implement base class abstract method class MyClient public static void Main()名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 8 页 -MyClass mc=new MyClass();mc.Method1();我们不能把关键字abstract 和 sealed 一起用在
10、C#中,因为一个密封类不能够被抽象。abstract class MyAbs public abstract void AbMethod1();public abstract void AbMethod2();class MyClass1:MyAbs public override void AbMethod1()Console.WriteLine(Abstarct method#1 of MyClass1);public override void AbMethod2()Console.WriteLine(Abstarct method#2 of MyClass1);class MyClie
11、nt public static void Main()MyAbs ma1=new MyClass1();/Polymorphism ma1.AbMethod1();ma1.AbMethod2();抽象方法有以下特征:1.一个抽象方法可以看作是一个虚函数。2.抽象方法的声明只能在抽象类中。3.因为抽象方法声明只提供一个无实现的方式,没有方法体4.方法体的实现被覆写方法提供,覆写方法是一个非抽象类的成员。名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 8 页 -5.抽象属性的行为和抽象方法相像,除了不同的声明形式。6.在一个静态属性中使用abstract 是一个错误。*一个抽象属性
12、能够通过派生类使用override 实现.对于抽象类:一个抽象类必须为所有的接口成员提供实现一个用于实现接口的抽象类可能把接口方法安排到抽象方法上。例如interface I void M();abstract class C:I public abstract void M();抽象类具有以下特征:1.抽象类不能被实例化。2.抽象类可以包含抽象方法和访问器3.不能把抽象类用密封(sealed)来修饰,那就意味着类不能被继承,这违反抽象类被继承的原则。4.一个派生于一个抽象类的非抽象类必须包括所有的继承来的抽象方法和访问器的实现5.在方法和属性中使用abstract 关键字意味着包含它们的实现
13、。二、解释2/抽象方法:只包含方法定义,但没有具体实现的方法,需要其子类或者子类的子类来具体实现。/静态方法不能标记为override、virtual 或abstract,即静态方法都必须是具体的/抽象类:含有一个或多个抽象方法的类称为抽象类,在声明时,类名前须添加abstract关键字/抽象类中可以包含非抽象方法/抽象类不能够被实例化,这是因为它包含了没有具体实现的方法,即可实例化的类一定不是抽象类,不包含未具体实现的抽象方法。/子类继承抽象父类后,可以使用override 关键字覆盖父类中的抽象方法,并做具体的实现。也可以不实现抽象方法,留给后代实现,这时子类仍旧是一个抽象类,必须声明为a
14、bstract 名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 8 页 -/继承的抽象方法不可以被隐藏/隐藏:在子类中创建与父类中的方法具有相同签名(相同的方法名,相同的参数列表-参数类型和次序)的方法(可以带有 virtual 或override 关键字)即可实现,但建议使用new 关键字,以明确地隐藏。/只能使用 override 关键字来覆盖(override)父类中标记为virtual、abstract或 override 的方法,而子类中标记为 override 的方法,也必须是父类中标记为virtual、abstract 或override 的方法。/覆盖(overr
15、ide):必须使用override 关键字,可以被覆盖的方法包括标记为abstract,virtual,和 override 的方法;/隐藏:使用 new 关键字,也可不使用关键字,可以被隐藏的方法包括一般方法,和标记为virtual 或override的方法;/重载(overload):不需要任何特殊的关键字/静态方法可以被隐藏或重载三、解释31、声明一个抽象方法使用abstract 关键字。2、一个类中可以包含一个或多个抽象方法。3、抽象类中可以存在非抽象的方法。4、抽象类不能被直接被实例化。5、实现抽象类用“:”(冒号),实现抽象方法用override 关键字。6、抽象类可以被抽象类所继
16、承,结果仍是抽象类。7、抽象方法被 实现 后,不能 更改 修饰 符。using System;namespace Abstract_for/抽象类Abc/abstract class Abcpublic abstract void Afunc();/声 明 了 抽 象 方 法,但 不 实 现public void Bfunc()Console.WriteLine(非抽象方法!);/抽象类Abc 的派生类Derv/class Derv:Abc/此类必须实现基类的抽象方法,否则必须声明为abstract 的public override void Afunc()/使用override 关 键 字
17、可 以 在 派 生 类 中 实 现 抽 象 方 法!通 过override声 明 重 写 的 方 法 成 为 重 写 基 类 方 法Console.WriteLine(实现抽象方法);public class Testpublic static void Main(string args)Derv d=new Derv();d.Afunc();d.Bfunc();抽象类用 abstract 形容的抽象类不能被实例化,只能被继承举例说明/抽象类abstract class 画图类 public void 画图 /继承类class 画三角类:画图类 public void 画图/实现画三角的方法/继承类class 画圆类:画图类 public void 画图/实现画圆的方法名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 8 页 -ok!画图类paint1=new 画三角类();paint1.画图();/画三角画图类paint2=new 画圆类();paint2.画图();/画圆名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 8 页 -
限制150内