C#_抽象类与接口的区别

本文对比了抽象类与接口的特点及用法。抽象类作为特殊类,可包含方法定义和实现,适合关系密切的对象间使用;接口为引用类型,只包含方法定义,适用于功能相似但关系不紧密的类。此外,还解释了抽象函数与虚函数的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前面试时被问及抽象类与接口的区别,感觉答得很不好,所以在此总结一下这个问题:

首先抽象类是一种特殊的类,它可以含有方法的定义和实现,也可以包含属性,构造函数等。当然抽象类也可以包含抽象函数和虚函数。 这个是C#三大特性之一多态的重要组成部分。

抽象类主要用于关系密切的对象之前,比如铁门和木门都是门,他们都继承自抽象类“门”。重点是“是什么?”

一个派生类只能继承至一个类(包括抽象类),派生类必须实现抽象类中定义的虚函数。

 

而接口是一种引用类型。它只能包含方法的定义但是没有实现。它更多的是起到一个规定的作用。

接口通常用于关系相对不那么紧密但是实现了某种功能的类之间。比如飞机和鸟都会飞,他们都继承自接口“飞”。重点是“能做什么?”

一个类可以继承自多个接口,而且必须实现接口中定义的所有成员(包括方法,属性等)。

好的接口应该是具有专一功能的,而不是多功能的,否则造成接口污染。如果一个类只是为了实现这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染。

 

前面提到了抽象函数和虚函数,那么这两者之间有什么区别呢?

虚函数是由关键字 virtual 来声明的。它可以包含实现。派生类可以直接使用它的实现也可以覆盖(override)它的实现。

而抽象函数是由关键字abstract来声明的。它不能包含实现。派生类必须实现抽象函数。

转载于:https://www.cnblogs.com/JaneTang/archive/2011/03/17/1986831.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值