当前位置: 首页 > 编程语言 > C#

为什么我可以抽象和覆盖抽象方法?分享

时间:2023-04-10 14:46:25 C#

为什么我可以抽象覆盖抽象方法?我有一个抽象基类:abstractclassFoo{virtualvoidDoSomeStuff(){//DoSomeStuff}abstractvoidDoSomeCrazyStuff();}另一个抽象类派生自:abstractclassBar:Foo{abstractoverridevoidDoSomeStuff();抽象覆盖voidDoSomeCrazyStuff();我理解为什么你会抽象地覆盖DoSomeStuff()-它需要一个新的实现来进一步派生类。但我不明白你为什么要抽象地覆盖DoSomeCrazyStuff()。据我所知,这是多余的——我很确定删除它会产生零负面影响。是否存在抽象覆盖对抽象有用的一些用例?如果不是,为什么没有编译器警告告诉我我写的东西什么也没做?为什么我可以抽象覆盖抽象方法?对于初学者来说,没有真正的理由阻止它。如果它产生编译器错误,它所做的只是使类更加脆弱。例如:abstractclassFoo{virtualvoidDoSomeStuff(){//DoSomeStuff}}abstractclassBar:Foo{abstractoverridevoidDoSomeStuff();如果abstractoverridevoidDoSomeStuff()ofabstract是非法的,则将Foo上的DoSomeStuff更改为abstractNow会阻止Bar编译。抽象覆盖是多余的,但没有潜在的缺点,因此编译器可以使用它。为什么没有编译器警告告诉我我写的东西什么也没做?编译器会为某些代表风险的事物生成警告:非显式方法隐藏、无法访问的代码、使用已弃用的方法等。唯一具有不必要的抽象覆盖的“问题”可能表明代码编写效率不高。这不是编译器关心的。是否存在抽象覆盖对抽象有用的一些用例?不起作用。但是,在某些用例中,这可能是有意完成的:通过在Bar中显式抽象覆盖它,您可以确保它被Bar的后代视为抽象,即使它将来可能在Foo中变为非抽象。尽管有此更改,Bar的后代仍将使用相同的合同。以上是C#学习教程:为什么我可以抽象和重写抽象方法?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: