抽象方法和虚拟方法有什么区别?在哪些情况下,建议使用抽象方法或虚拟方法?哪一种是最好的方法?


当前回答

C#中没有调用虚拟类的内容。

对于函数

抽象函数仅具有签名,驱动器类应使用功能重写。虚拟功能将保留驱动器类根据需要可以覆盖或不覆盖的部分功能

你可以决定你的要求。

其他回答

必须始终重写抽象函数。

因此:

抽象函数-当继承者必须提供自己的实现时虚拟-由继承人决定

据我所知:

抽象方法:

只有抽象类才能保存抽象方法。派生类也需要实现该方法,并且类中没有提供任何实现。

虚拟方法:

类可以声明这些并提供其实现。派生类还需要实现方法来重写它。

绑定是将名称映射到代码单元的过程。

后期绑定意味着我们使用名称,但延迟映射。换言之,我们首先创建/提及名称,然后让后续流程处理代码到该名称的映射。

现在考虑:

与人类相比,机器确实擅长搜索和排序与机器相比,人类确实擅长发明和创新

因此,简单的答案是:virtual是机器(运行时)的后期绑定指令,而abstract是人类(程序员)的后期约束指令

换句话说,虚拟意味着:

亲爱的运行时,通过执行您最擅长的操作将适当的代码绑定到此名称:搜索

抽象意味着:

亲爱的程序员,请尽你所能将适当的代码绑定到这个名字上:发明

为完整起见,重载意味着:

“亲爱的编译器,通过做你最擅长的事情,将适当的代码绑定到这个名称:排序”。

抽象方法没有实现。它在父类中声明。子类负责实现该方法。

虚拟方法应该在父类中有一个实现,它有助于子类选择是使用父类的该实现,还是为子类中的该方法自己有一个新的实现。

抽象函数:

它只能在抽象类中声明。它只包含方法声明不是抽象类中的实现。它必须在派生类中重写。

虚拟功能:

它可以在抽象类和非抽象类中声明。它包含方法实现。它可能被覆盖。