首页 > 编程知识 正文

【C# 教程系列第 11 篇】什么是抽象类、抽象方法

时间:2023-05-04 01:31:40 阅读:191390 作者:3753

这是【C# 教程系列第 11 篇】,如果觉得有用的话,欢迎关注专栏。

文章目录 一:什么是抽象类、抽象方法二:抽象类的特性1:抽象类不能实例化2:抽象类可以包含抽象方法和抽象访问器3:不能用 sealed 关键字修饰抽象类4:从抽象类派生的非抽象类,必须包括继承的所有抽象方法和抽象访问器的实现 三:抽象方法的特性四:抽象方法与抽象类之间的关系五:抽象类与一般类的相同点及不同点
先看一句话
C#允许把类和方法声明为abstract,即抽象类和抽象方法。
抽象类通常代表一个抽象的概念,他提供一个继承的出发点,当设计一个新的抽象类时,一定是用来继承的。所以在一个继承关系形成的等级结构中,树叶节点应当为具体类,而树枝节点均应当为抽象类。–摘自《大话设计模式》

这是比较官方的说法,下面用我自己的语言来描述下

一:什么是抽象类、抽象方法

在 C# 中,使用关键字 abstract 来定义抽象类和抽象方法。

二:抽象类的特性

抽象类是一种特殊的基础类,并不与具体的事物联系。它有以下特性

1:抽象类不能实例化

验证如下:

public abstract class Car{}

2:抽象类可以包含抽象方法和抽象访问器

验证代码如下:

//抽象方法public abstract void Run();//抽象访问器public abstract string Name { get; } 3:不能用 sealed 关键字修饰抽象类

通常情况下,我们会把抽象类视为公共基类,如果使用了sealed 修饰符,这意味着抽象类将不能被继承
验证如下:

4:从抽象类派生的非抽象类,必须包括继承的所有抽象方法和抽象访问器的实现

验证如下:

三:抽象方法的特性

一个抽象方法通俗易懂的说就是一个没有方法体的方法。它有以下特性
1):抽象方法是隐式的虚方法。
2):只允许在抽象类使用抽象方法声明。
3):因为抽象方法声明不提供实际的实现,所有没有方法体。方法声明只是以一个分号结束,并且在签名后没有大括号,实现由一个重写方法提供,此重写方法是非抽象类的成员。
4):在抽象方法声明中使用static或virtual修饰符是错误的。
5):除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。
6):在静态属性上使用abstract修饰符是错误的。
7):在派生类中,通过包括使用 override 修饰符的属性声明,可以重写抽象的继承属性。

下面两种抽象方法的写法都是可以的

//抽象方法public abstract void Run();abstract public void Stop();

只不过将 abstract 放到访问修饰符前面时会提示你“修饰符声明顺序不一致”,但这样写也没错,只不过我喜欢第一种写法,看着舒服。
另外,抽象方法不能设置为私有的(因为抽象方法写出来就是为了子类继承实现的)
验证如下

四:抽象方法与抽象类之间的关系

有抽象方法的类必然是抽象类,
但是,抽象类中的方法并不一定都是抽象方法。

五:抽象类与一般类的相同点及不同点

相同点:
都可以继承其它的类或者接口,也可以派生子类,并且都有具体的方法;
不同点:
抽象类中有抽象方法,一般类中没有;
抽象类不可以实例化,一般类却可以;

当然,概念毕竟只是概念,只能让我们简单的认识抽象类及抽象方法,拿例子分析会更好点,所以这里我补充了一篇 C# 抽象类的简单实现 的博客,希望可以帮到你。

你的问题得到解决了吗?欢迎在评论区留言。

赠人玫瑰,手有余香,如果觉得文章不错,希望可以给个一键三连,感谢。

结束语 技术是一点一点积累的,大神也不是一天就可以达到的。原地不动就是退步,所以每天进步一点点。

最后,附上一句格言:"好学若饥,谦卑若愚",望共勉。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。