review——C# (7)抽象成员和抽象类

FROM P141

1.抽象成员

抽象成员是指设计为被覆写的函数成员。有以下特征:

□必须是一个函数成员。即字段和常量不能为抽象成员。

□必须用abstract修饰符标记。

□不能有实现代码块。抽象成员的代码用分号表示。

例如,下面取自一个类定义的代码声明了两个抽象成员:一个抽象方法、一个抽象属性

1         abstract public void PrintStuff(string s);//分号替换实现
2         abstract public int MyProperty
3         {
4             get;//分号替换实现    
5             set;//分号替换实现
6         }

抽象成员只可以在抽象类中声明。一共4种类型的成员可以声明为抽象的:

方法、属性、事件、索引

其他事项如下:

□尽管抽象成员必须在派生类中用相应的成员覆写,但不能把virtual修饰符附加到abstract修饰符

□类似虚成员,派生类中抽象成员的实现必须指定override修饰符

下图对虚成员和抽象成员进行了比较:

2.抽象类

抽象类就是指设计为被继承的类。抽象类只能用作其他类的基类。

□不能创建抽象类的实例

□抽象类使用abstract修饰符声明

1     abstract class MyClass                           //基类
2     {
3         ……
4     }

抽象类可以包含抽象成员和普通的非抽象成员。抽象类的成员可以是抽象成员和普通带实现成员的任意组合。

□抽象类可以派生自另一个抽象类。

1     abstract class MyClass                           //基类
2     {
3         ……
4     }
5     abstract class AbClass : MyClass
6     {
7         ……
8     }

□任何派生自抽象类的类必须使用override关键字实现该类所有的抽象成员,除非派生类自己也是抽象类。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace review
 8 {
 9     abstract class AbClass                           //抽象类
10     {
11         public void IdentifyBase()                   //普通方法
12         {
13             Console.WriteLine("I am AbClass");
14         }
15         abstract public void IdentifyDerived();      //抽象方法
16         abstract public int MyInt { get; set; }      //抽象属性
17     }
18     class DerivedClass : AbClass
19     {
20         public override void IdentifyDerived()
21         {
22             Console.WriteLine("I am DerivedClass");
23         }
24         private int _myInt;
25         public override int MyInt
26         {
27             get
28             {
29                 return _myInt;
30             }
31 
32             set
33             {
34                 _myInt = value;
35             }
36         }
37     }
38     class Program
39     {
40         static void Main(string[] args)
41         {
42             //AbClass a = new AbClass();            //错误 抽象类不能实例化
43             //a.IdentifyDerived();
44             DerivedClass b = new DerivedClass();    //实例化派生类
45             b.MyInt = 28;
46             b.IdentifyBase();                       //调用继承的方法
47             b.IdentifyDerived();                    //调用抽象方法
48             Console.WriteLine(b.MyInt);
49             Console.Read();
50         }
51     }
52 }
53 /*
54  * 输出如下:
55  * I am AbClass
56  * I am DerivedClass
57  * 28
58  * */
原文地址:https://www.cnblogs.com/quintessence/p/9110224.html