社区
C#
帖子详情
抽象类不能实例化的根本原因是什么?不应该是有抽象方法就不能实例化了
shou_ji_dang
2011-10-18 08:45:25
抽象类不能实例化是因为抽象类里有没有实现的方法,这个理由很牵强。抽象类不是必须有抽象方法,抽象方法则必须放在抽象类里。反编译发现抽象类默认无参构造函数是保护的,但设置成公有的还是无法实例化(抽象类里没有抽象方法),而且不能有抽象构造函数或抽象静态方法。为什么要这样设置?不能实例化还要默认保护的无参构造函数干什么?
...全文
1578
11
打赏
收藏
抽象类不能实例化的根本原因是什么?不应该是有抽象方法就不能实例化了
抽象类不能实例化是因为抽象类里有没有实现的方法,这个理由很牵强。抽象类不是必须有抽象方法,抽象方法则必须放在抽象类里。反编译发现抽象类默认无参构造函数是保护的,但设置成公有的还是无法实例化(抽象类里没有抽象方法),而且不能有抽象构造函数或抽象静态方法。为什么要这样设置?不能实例化还要默认保护的无参构造函数干什么?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
showjim
2011-10-18
打赏
举报
回复
抽象说明是缺少细节的,是不完整的。
默认保护的无参构造函数,应该是给编译器调用的,为了在实现层面上与其它类没有差异,简化了设计。
静态继承,确实是个问题,比如我个人的应用经常会碰到这个问题。我认为是.net开发组在这个问题上偷懒造成的,可能他们认为你把静态改成动态不就行了,只是感觉不优雅。
IE11下面经常卡到爆
2011-10-18
打赏
举报
回复
从面向对象设计来讲,抽象类是从一堆有某种共性的具体子类中抽象出来的,它代表的是这一类事物,而非具体的某一个
就像人和LZ的关系一样
shou_ji_dang
2011-10-18
打赏
举报
回复
[Quote=引用 6 楼 findcaiyzh 的回复:]
实例化后调用了abstract函数怎么办。它没有实现。
[/Quote]
即使没有写抽象函数还是被阉割掉了可能存在的这种风险,C#把危险降到很低很低
idaydayup
2011-10-18
打赏
举报
回复
[Quote=引用 5 楼 shou_ji_dang 的回复:]
引用 4 楼 gengchenhui 的回复:
我觉得是这样,举个例子:张三是个人,人是动物,这里面张三是对象,人是类,动物就是个抽象类,你怎么去实例化一个动物?让他长成什么样?
我是这样理解面向对象的,跟现实生活联系起来。
很有道理,这种东西不能用语法考虑。三大特征必须联系生活才行。就好比静态成员可以当成一个家庭的财产,会一辈辈传下去,除非晚辈们重新有了新财产(隐藏了老辈们的财产)。……
[/Quote]
好乱 呵呵,确实要结合实际来思考 很多东西跟现实结合起来思考就会发现是对的.否则就想不通
宝_爸
2011-10-18
打赏
举报
回复
实例化后调用了abstract函数怎么办。它没有实现。
shou_ji_dang
2011-10-18
打赏
举报
回复
[Quote=引用 4 楼 gengchenhui 的回复:]
我觉得是这样,举个例子:张三是个人,人是动物,这里面张三是对象,人是类,动物就是个抽象类,你怎么去实例化一个动物?让他长成什么样?
我是这样理解面向对象的,跟现实生活联系起来。
[/Quote]
很有道理,这种东西不能用语法考虑。三大特征必须联系生活才行。就好比静态成员可以当成一个家庭的财产,会一辈辈传下去,除非晚辈们重新有了新财产(隐藏了老辈们的财产)。而非静态的就好比家庭成员的财产,只有家庭有这个成员才会有这份财产。不知道这么理解对不对?
gengchenhui
2011-10-18
打赏
举报
回复
我觉得是这样,举个例子:张三是个人,人是动物,这里面张三是对象,人是类,动物就是个抽象类,你怎么去实例化一个动物?让他长成什么样?
我是这样理解面向对象的,跟现实生活联系起来。
shou_ji_dang
2011-10-18
打赏
举报
回复
[Quote=引用 2 楼 wanghui0380 的回复:]
晕,还真能追,可惜追错方向了
思想决定手段,而非手段决定思想
抽象类不能实例化,是因为微软想把做成这样。
而不是莫个程序员对构造函数写了保护,于是微软说这样挺好,以后就这样办了
[/Quote]
这个我也想过,我觉得C#把许多可能出错的功能阉割掉了,静态类不能继承静态类我觉得有时是可以的,但C#为了防止有实例类继承静态类,直接让静态类不能派生也不能继承了,让静态类完全独立出来,只继承于Object。我只是怕自己理解错了,想看看大神们的想法是否相同。
wanghui0380
2011-10-18
打赏
举报
回复
晕,还真能追,可惜追错方向了
思想决定手段,而非手段决定思想
抽象类不能实例化,是因为微软想把做成这样。
而不是莫个程序员对构造函数写了保护,于是微软说这样挺好,以后就这样办了
bdmh
2011-10-18
打赏
举报
回复
理解为规定即可,当你主宰编译器后,你可以决定是否让实例化
shou_ji_dang
2011-10-18
打赏
举报
回复
[Quote=引用 10 楼 sbwwkmyd 的回复:]
抽象说明是缺少细节的,是不完整的。
默认保护的无参构造函数,应该是给编译器调用的,为了在实现层面上与其它类没有差异,简化了设计。
静态继承,确实是个问题,比如我个人的应用经常会碰到这个问题。我认为是.net开发组在这个问题上偷懒造成的,可能他们认为你把静态改成动态不就行了,只是感觉不优雅。
[/Quote]
确实是这个问题,他们只是想减少麻烦,把整个静态类全部孤立起来,避免了讨论静态类继承实例类或者实例类继承静态类的麻烦,o(︶︿︶)o 唉,阉掉了
2013年春季省开课程网络形考“经营管理实务”第三次作业.doc
2013年春季省开课程网络形考“经营管理实务”第三次作业.doc
【数据科学工具】Anaconda下载安装与配置教程:涵盖系统要求、安装步骤及环境配置
内容概要:本文详细介绍了Anaconda的下载、安装与配置方法(2025最新版)。Anaconda是一个开源的Python/R数据科学集成开发平台,预装了1500多个科学计算库,并提供conda包管理和环境管理功能。文章首先列出了系统要求,接着分别讲述了适用于不同操作系统的下载方式,包括官方下载和国内镜像下载。然后,具体讲解了Windows、macOS和Linux三种操作系统的安装步骤,以及环境变量的手动配置方法。此外,还提供了验证安装是否成功的命令和配置国内镜像源的方法,以提高下载速度。最后,列出了一些常用conda命令和常见问题的解决方案。 适合人群:从事数据科学、机器学习领域的研究人员和开发者,特别是需要频繁使用Python科学计算库的用户。 使用场景及目标:①帮助用户快速搭建Python开发环境,尤其是需要多个Python版本共存或隔离环境的情况下;②解决因网络原因导致的下载速度慢的问题;③提供详细的安装指南,确保安装过程顺利进行;④指导用户正确配置环境变量,避免常见的安装后无法使用的错误。 阅读建议:由于Anaconda涉及多平台安装和配置,建议读者根据自己的操作系统选择相应的章节重点阅读,并严格按照步骤操作。对于初次使用者,建议先从简单的安装入手,再逐步学习环境管理和包管理的相关命令。
综合布线设计内容.doc
综合布线设计内容.doc
成功的项目管理.docx
成功的项目管理.docx
前端分析-202307110078988
前端分析-202307110078988
C#
111,095
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章