解析abstract与override究竟可不可以同时使用

 更新时间:2020年6月25日 11:41  点击:2158

一个属性或方法可以同时被abstract 和override 修饰吗?我的一个同事这样问我。我最初的反应是:“当然不可以”,但是事实上证明的确是可以一起修饰的。

对于这个问题,我认真的思考了下,这种方式虽然少见,但是却是合法的甚至还有点意义。

假设我们有一个非常大的,复杂的类型,让我们叫他”Thingy”:

abstract class Thingy
{
  public virtual string Name { get { return ""; } }
}

当然Thingy将会被很多子类集成,并且大部分子类都有一个默认的””的Name,或者是null,

或者是其他什么的。关键点并不在这个Name究竟有什么值,而是对于大部分在类型层次结构中的类都

有一个有意义的默认的名字。

但是,假如有另一个抽象的thingy,FrobThingy,它总是有一个非空(non-empty)的名字.为了防止

FrobThingy的子类意外的调用thingy的实现,我们可以这样:

abstract class FrobThingy : Thingy
{
  public abstract override string Name { get; }
}

这样,假如你有一个子类BigFrobThingy,你就不得不自己提供Name属性的实现了,因为如果你不提供的

话,你就无法通过编译了。

[!--infotagslink--]

相关文章

  • Java中的abstract和interface

    abstract和interface关键字在Java中随处可见,它是Java三大特性封装、继承、多态特性的实现重要支柱之一。interface关键字用于定义接口抽象,其本质上是用于定义类型、定义类所具有的能力,下面来看看详细内容,需要的朋友可以参考一下...2021-11-03
  • C++中Overload,Override,Hide之间的区别

    重载overload,这个概念是大家熟知的。在同一可访问区内被声名的几个具有不同参数列的(参数的类型、个数、顺序不同)同名函数,程序会根据不同的参数列来确定具体调用哪个函数,这种机制就是重载...2020-04-25
  • 重写、隐藏基类(new, override)的方法

    重写、隐藏基类(new, override)的方法,需要的朋友可以参考一下...2020-06-25
  • C#中Override关键字和New关键字的用法详解

    这篇文章主要介绍了C#中Override关键字和New关键字的用法,需要的朋友可以参考下...2020-06-25
  • 解析abstract与override究竟可不可以同时使用

    本篇文章是对abstract与override究竟可不可以同时使用进行了详细分析介绍,需要的朋友参考下...2020-06-25
  • 深入解析C#中的abstract抽象类

    这篇文章主要介绍了深入解析C#中的abstract抽象类,包括定义抽象类等C#面相对象编程中的基础知识,需要的朋友可以参考下...2020-06-25
  • C#中Abstract 、Virtual和Override的使用及区别

    C#中virtual,abstract,override用于方法重载,子类覆盖了父类的相同方法,父类中的实现不可能再被外面调用。本文给大家重点介绍C#中Abstract 、Virtual和Override的使用及区别,需要的朋友参考下吧...2021-06-11
  • C#中new和override的区别个人总结

    这篇文章主要介绍了C#中new和override的区别个人总结,本文以问答的方式讲解了new和override的区别,需要的朋友可以参考下...2020-06-25
  • Spring配置文件中parent与abstract的使用

    这篇文章主要介绍了Spring配置文件中parent与abstract的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-22
  • C#中abstract的用法详解

    abstract可以用来修饰类,方法,属性,索引器和时间,这里不包括字段. 使用abstrac修饰的类,该类只能作为其他类的基类,不能实例化,而且abstract修饰的成员在派生类中必须全部实现,不允许部分实现,否则编译异常...2020-06-25
  • PHP中overload与override的区别

    本文主要介绍了PHP中overload与override的区别。具有很好的参考价值,下面跟着小编一起来看下吧...2017-02-18
  • 深入理解C# abstract和virtual关键字

    深入理解C# abstract和virtual关键字,学习c#的朋友可以参考下。...2020-06-25
  • C# new和override的区别分析

    C# new和override都会覆盖父类中的方法。那它们两者之前有什么区别呢?...2021-09-22
  • C++中overload,override,overwrite的区别详细解析

    以下是对C++中overload,override,overwrite的区别进行了详细的分析介绍,需要的朋友可以过来参考下...2020-04-25
  • 详解C#用new和override来实现抽象类的重写区别

    本篇文章主要介绍了详解C#用new和override来实现抽象类的重写区别,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧。...2020-06-25
  • 深入理解C#中new、override、virtual关键字的区别

    下面小编就为大家带来一篇深入理解C#中new、override、virtual关键字的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • c#中的interface abstract与virtual介绍

    abstract 与virtual : 方法重写时都使用 override 关键字,interface中的方法和abstract方法都要求实现...2020-06-25
  • 详谈c++11 final与override说明符

    下面小编就为大家带来一篇详谈c++11 final与override说明符。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25
  • C++ override关键字使用详解

    这篇文章主要介绍了C++ override关键字使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25
  • java中重写父类方法加不加@Override详解

    这篇文章主要介绍了java中重写父类方法加不加@Override详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-22