C#--抽象类(转载)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#--抽象类(转载),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5549字,纯文字阅读大概需要8分钟。
内容图文
在C#中使用关键字 abstract 来定义抽象类和抽象方法。
不能初始化的类被叫做抽象类,它们只提供部分实现,但是另一个类可以继承它并且能创建它们
的实例。
"一个包含一个或多个纯虚函数的类叫抽象类,抽象类不能被实例化,进一步
一个抽象类只能通过接口和作为其它类的基类使用."- C++ Programming Language by Stroustrup Chapter13.2
抽象类能够被用于类,方法,属性,索引器和事件,使用abstract 在一个类声明中表示该类倾向要作为其它类的基类
成员被标示成abstract,或被包含进一个抽象类,必须被其派生类实现。
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
abstract?class?ShapesClass
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????abstract?public?int?Area();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
????class?Square?:?ShapesClass
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????int?x,?y;
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????//?Not?providing?an?Area?method?results
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????//?in?a?compile-time?error.
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?override?int?Area()
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827695.jpg)
????????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????return?x?*?y;
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827747.jpg)
????????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
例如,一个包含非抽象方法的抽象类:
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
????abstract?class?MyAbs
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?void?NonAbMethod()
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827695.jpg)
????????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????Console.WriteLine("Non-Abstract?Method");
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827747.jpg)
????????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
????class?MyClass?:?MyAbs
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
????class?MyClient
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?static?void?Main()
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827695.jpg)
????????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????//MyAbs?mb?=?new?MyAbs();//not?possible?to?create?an?instance
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????MyClass?mc?=?new?MyClass();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????mc.NonAbMethod();?//?Displays?'Non-Abstract?Method'
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827747.jpg)
????????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
一个抽象类可以包含抽象和非抽象方法,当一个类继承于抽象类,那么这个派生类必须实现所有的
的基类抽象方法。
一个抽象方法是一个没有方法体的方法。
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
?abstract?class?MyAbs
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?void?NonAbMethod()
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827695.jpg)
????????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????Console.WriteLine("Non-Abstract?Method");
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827747.jpg)
????????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?abstract?void?AbMethod();?//?An?abstract?method
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
????class?MyClass?:?MyAbs//must?implement?base?class?abstract?methods
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?override?void?AbMethod()
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827695.jpg)
????????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????Console.WriteLine("Abstarct?method");
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827747.jpg)
????????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
????class?MyClient
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?static?void?Main()
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827695.jpg)
????????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????MyClass?mc?=?new?MyClass();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????mc.NonAbMethod();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????mc.AbMethod();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827747.jpg)
????????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
但是通过声明派生类也为抽象,我们可以避免所有或特定的虚方法的实现,
这就是抽象类的部分实现。
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
abstract?class?MyAbs
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?abstract?void?AbMethod1();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?abstract?void?AbMethod2();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
????//not?necessary?to?implement?all?abstract?methods
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
????//partial?implementation?is?possible
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
????abstract?class?MyClass1?:?MyAbs
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?override?void?AbMethod1()
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827695.jpg)
????????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????Console.WriteLine("Abstarct?method?#1");
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827747.jpg)
????????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
????class?MyClass?:?MyClass1
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?override?void?AbMethod2()
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827695.jpg)
????????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????Console.WriteLine("Abstarct?method?#2");
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827747.jpg)
????????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
????class?MyClient
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?static?void?Main()
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827695.jpg)
????????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????MyClass?mc?=?new?MyClass();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????mc.AbMethod1();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????mc.AbMethod2();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827747.jpg)
????????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
在C#中,一个抽象类能够继承另一个非抽象类,另外,继承了基类的方法,添加新的
抽象和非抽象方法是可行的。
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
?class?MyClass1?//?Non-Abstract?class
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?void?Method1()
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827695.jpg)
????????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????Console.WriteLine("Method?of?a?non-abstract?class");
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827747.jpg)
????????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
????abstract?class?MyAbs?:?MyClass1?//?Inherits?from?an?non-abstract?class
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?abstract?void?AbMethod1();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
????class?MyClass?:?MyAbs//must?implement?base?class?abstract?methods
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?override?void?AbMethod1()
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827695.jpg)
????????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????Console.WriteLine("Abstarct?method?#1?of?MyClass");
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827747.jpg)
????????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
????class?MyClient
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?static?void?Main()
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827695.jpg)
????????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????MyClass?mc?=?new?MyClass();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????mc.Method1();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????mc.AbMethod1();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827747.jpg)
????????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
一个抽象类也能从一个接口来实现,这种情况,我们必须为所有的方法提供方法体,这些方法是来自接口
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
????interface?IInterface
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????void?Method1();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
????abstract?class?MyAbs?:?IInterface
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?void?Method1()
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827695.jpg)
????????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????Console.WriteLine("Method?implemented?from?the?IInterface");
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827747.jpg)
????????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
????class?MyClass?:?MyAbs//must?implement?base?class?abstract?method
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
????class?MyClient
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?static?void?Main()
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827695.jpg)
????????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????MyClass?mc?=?new?MyClass();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????mc.Method1();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827747.jpg)
????????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}?
我们不能把关键字abstract 和 sealed 一起用在C#中,因为一个密封类不能够被抽象。
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
?abstract?class?MyAbs
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?abstract?void?AbMethod1();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?abstract?void?AbMethod2();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
????class?MyClass1?:?MyAbs
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?override?void?AbMethod1()
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827695.jpg)
????????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????Console.WriteLine("Abstarct?method?#1?of?MyClass1");
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827747.jpg)
????????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?override?void?AbMethod2()
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827695.jpg)
????????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????Console.WriteLine("Abstarct?method?#2?of?MyClass1");
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827747.jpg)
????????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
????class?MyClient
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????public?static?void?Main()
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827695.jpg)
????????{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????MyAbs?ma1?=?new?MyClass1();//?Polymorphism
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????ma1.AbMethod1();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????????????ma1.AbMethod2();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827747.jpg)
????????}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
????}
抽象方法有以下特征:
1.一个抽象方法可以看作是一个虚函数。
2.抽象方法的声明只能在抽象类中。
3.因为抽象方法声明只提供一个无实现的方式,没有方法体
4.方法体的实现被覆写方法提供,覆写方法是一个非抽象类的成员。
5.抽象属性的行为和抽象方法相像,除了不同的声明形式。
6.在一个静态属性中使用abstract 是一个错误。
*一个抽象属性能够通过派生类使用 override 实现.
对于抽象类:
一个抽象类必须为所有的接口成员提供实现
一个用于实现接口的抽象类可能把接口方法安排到抽象方法上。例如
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
interface?I?
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????void?M();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
}
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827366.jpg)
abstract?class?C:?I?
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827464.jpg)
{
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827488.jpg)
????public?abstract?void?M();
![C#--抽象类(转载) - 文章图片](/upload/getfiles/0001/2021/5/1/20210501050827515.jpg)
}
抽象类具有以下特征:
1.抽象类不能被实例化。
2.抽象类可以包含抽象方法和访问器
3.不能把抽象类用密封(sealed)来修饰,那就意味着类不能被继承,这违反抽象类被继承的原则。
4.一个派生于一个抽象类的非抽象类必须包括所有的继承来的抽象方法和访问器的实现
5.在方法和属性中使用abstract 关键字意味着包含它们的实现。
转载于:https://www.cnblogs.com/flyinthesky/archive/2008/06/18/1224774.html
内容总结
以上是互联网集市为您收集整理的C#--抽象类(转载)全部内容,希望文章能够帮你解决C#--抽象类(转载)所遇到的程序开发问题。
如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
来源:【匿名】