关于C#中系统定义类非抽象方法无方法体的疑问
为什么System.Object的ToString()等方法无方法体但并非抽象?
- 这些方法是用
extern关键字标记的外部实现方法,意思是它们的代码逻辑不在C#层面的类定义里,而是由.NET的CLR(公共语言运行时)底层提供实现。比如你查看System.Object的源码,会看到ToString()的定义大概是这样:public virtual extern string ToString(); System.Object作为所有.NET类型的根类,它的核心方法(比如ToString()、GetHashCode())需要和运行时深度绑定,默认逻辑直接由CLR处理——比如ToString()默认返回类型的完整名称,这种基础逻辑没必要在C#代码里写方法体。- 这里的关键是
extern和抽象方法的区别:抽象方法要求子类必须重写实现,而extern方法已经有了外部提供的实现,子类只是可以选择重写来替换默认逻辑,不是必须实现。
内容的提问来源于stack exchange,提问作者LiaPer
相关产品推荐
相关产品推荐

