解析abstract与override究竟可不可以同时使用
一个属性或方法可以同时被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属性的实现了,因为如果你不提供的
话,你就无法通过编译了。
相关文章
- abstract和interface关键字在Java中随处可见,它是Java三大特性封装、继承、多态特性的实现重要支柱之一。interface关键字用于定义接口抽象,其本质上是用于定义类型、定义类所具有的能力,下面来看看详细内容,需要的朋友可以参考一下...2021-11-03
C++中Overload,Override,Hide之间的区别
重载overload,这个概念是大家熟知的。在同一可访问区内被声名的几个具有不同参数列的(参数的类型、个数、顺序不同)同名函数,程序会根据不同的参数列来确定具体调用哪个函数,这种机制就是重载...2020-04-25- 重写、隐藏基类(new, override)的方法,需要的朋友可以参考一下...2020-06-25
- 这篇文章主要介绍了C#中Override关键字和New关键字的用法,需要的朋友可以参考下...2020-06-25
- 本篇文章是对abstract与override究竟可不可以同时使用进行了详细分析介绍,需要的朋友参考下...2020-06-25
- 这篇文章主要介绍了深入解析C#中的abstract抽象类,包括定义抽象类等C#面相对象编程中的基础知识,需要的朋友可以参考下...2020-06-25
C#中Abstract 、Virtual和Override的使用及区别
C#中virtual,abstract,override用于方法重载,子类覆盖了父类的相同方法,父类中的实现不可能再被外面调用。本文给大家重点介绍C#中Abstract 、Virtual和Override的使用及区别,需要的朋友参考下吧...2021-06-11- 这篇文章主要介绍了C#中new和override的区别个人总结,本文以问答的方式讲解了new和override的区别,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了Spring配置文件中parent与abstract的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-22
- abstract可以用来修饰类,方法,属性,索引器和时间,这里不包括字段. 使用abstrac修饰的类,该类只能作为其他类的基类,不能实例化,而且abstract修饰的成员在派生类中必须全部实现,不允许部分实现,否则编译异常...2020-06-25
- 本文主要介绍了PHP中overload与override的区别。具有很好的参考价值,下面跟着小编一起来看下吧...2017-02-18
- 深入理解C# abstract和virtual关键字,学习c#的朋友可以参考下。...2020-06-25
- C# new和override都会覆盖父类中的方法。那它们两者之前有什么区别呢?...2021-09-22
C++中overload,override,overwrite的区别详细解析
以下是对C++中overload,override,overwrite的区别进行了详细的分析介绍,需要的朋友可以过来参考下...2020-04-25- 本篇文章主要介绍了详解C#用new和override来实现抽象类的重写区别,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧。...2020-06-25
深入理解C#中new、override、virtual关键字的区别
下面小编就为大家带来一篇深入理解C#中new、override、virtual关键字的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25c#中的interface abstract与virtual介绍
abstract 与virtual : 方法重写时都使用 override 关键字,interface中的方法和abstract方法都要求实现...2020-06-25- 下面小编就为大家带来一篇详谈c++11 final与override说明符。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25
- 这篇文章主要介绍了C++ override关键字使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25
- 这篇文章主要介绍了java中重写父类方法加不加@Override详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-22