中易网

C# 的 抽象函数,虚函数,接口,有点晕,

答案:4  悬赏:70  
解决时间 2021-04-28 15:08
  • 提问者网友:堕落的邪教徒
  • 2021-04-27 19:48
梳理下
最佳答案
  • 二级知识专家网友:温柔刺客
  • 2021-04-27 21:25
1. 抽象类和抽象函数
C#中使用abstract关键字,将类和函数声明为抽象类或抽象函数
抽象类不能实例化,抽象函数没有执行代码,必须在非抽象的派生类中重写
抽象函数是虚拟的,但不需要提供virtual关键字,否则会报错
如果类包含抽象函受,该类将也是抽象的,也必须声明为抽象的

2. 密封类和密封方法
C#中使用关键字sealed,将类和方法声明为密封类或者密封方法
对于密封类来说,表示不能继承该类;对于密封方法来说,表示不能重写该方法
密封类不能作为基类被继承,但它可以继承别的类或借口
在密封类中不能声明受保护成员或虚成员,因为受保护成员只能从派生类进行访问,而虚成员只能在派生类中重写
由于密封类的不可继承性,因此密封类不能声明为抽象的,即sealed修饰符不能与abstract修饰符同时使用
全部回答
  • 1楼网友:情窦初殇
  • 2021-04-28 00:56
1.virtual:允许被重写,但不强制要求。声明时提供其自身实现; 2.abstract:强制要求其继承者重写。声明时不提供其自身的实现,抽象类不能被实例化; 3.interface:接口就是协议,其声明的成员(属性,方法,事件和索引器)必须由其继承的类实现。接口不能直接被实例化。 虚方法与抽象方法的区别在于,虚方法提供自身的实现,并且强制要求子类重写;而抽象方法不提供自身的实现,并且强制子类重写。 抽象类与接口 很相似,但是思路不一样。接口是公开类的成员,而抽象类则是抽象类成员以要求子类继承并实现。 相同点:1、都不能实例化; 2、都包含未实现的方法声明 不同:1、抽象类只有抽象方法,接口可以包含方法、属性、索引器、事件
  • 2楼网友:高冷不撩人
  • 2021-04-28 00:09
抽象方法: 用abstract关键字修饰,不允许有方法体,必须被子类override,抽象方法只能在抽象类中虚方法:用virtual修饰,要有方法体,哪怕里面什么也没有。可以被子类override,除了密封类之外都可以有虚方法。接口:用interface修饰,接口中定义的方法也不能有方法体,实现接口的类必须实现接口中定义的所有方法
  • 3楼网友:恕我颓废
  • 2021-04-27 23:04
简单的理解,虚函数可以被重载,基类中有实现。纯虚函数只能被重载,基类中只有定义没有实现。只要就是多态的概念,父类指针指向子类对象的时候,会执行子类中的方法。比如一个动物类,和一个人类人继承于动物 动物是基类,里面有一个死亡方法,基类有自己的实现人类里重载了基类里的死亡方法之后你写People p = new People();然后一个方法要一个动物作为参数比如杀死某个动物kill(p) 注意kill要的是animal对象p是People的对象,不过因为p继承与animal 所以可以传入kill方法里比如要调用对象的 dead()方法那么这个时候 kill方法里调用的就是People的dead()方法 而不是animal的 接口的成员函数全部都是都是纯虚函数.抽象函数和纯虚函数是一个概念 就是基类没有实现 交给子类去实现
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息