社区
C#
帖子详情
抽象类不能实例化的根本原因是什么?不应该是有抽象方法就不能实例化了
shou_ji_dang
2011-10-18 08:45:25
抽象类不能实例化是因为抽象类里有没有实现的方法,这个理由很牵强。抽象类不是必须有抽象方法,抽象方法则必须放在抽象类里。反编译发现抽象类默认无参构造函数是保护的,但设置成公有的还是无法实例化(抽象类里没有抽象方法),而且不能有抽象构造函数或抽象静态方法。为什么要这样设置?不能实例化还要默认保护的无参构造函数干什么?
...全文
1580
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 唉,阉掉了
基于PLC的彩灯控制组态王报告.doc
基于PLC的彩灯控制组态王报告.doc
UC3842/3/4/5系列电流模式PWM控制器的应用笔记:低成本高效电源转换器设计
内容概要:本文档详细介绍了UC3842/3/4/5系列集成电路的应用,旨在解决电源设计中电气性能和成本之间的矛盾。UC3842系列是一种集成脉宽调制器(PWM),专为低成本电流模式控制设计。文中阐述了电流模式控制的优势,如输入电压前馈特性、优秀的线路调节性能、简化的大信号动态响应和电流限制机制。此外,文档还涵盖了UC3842系列的具体功能,如欠压锁定(UVLO)、振荡器配置、最大占空比、电流检测与限制、误差放大器补偿、图腾柱输出、噪声抑制和同步技术。最后,提供了多个基于UC3842系列的实际电路设计案例,包括隔离反激式稳压器和推挽式DC-DC转换器。 适合人群:从事电源设计的技术人员,特别是对电流模式控制和PWM技术感兴趣的工程师。 使用场景及目标:①理解和掌握UC3842系列IC的工作原理和应用场景;②学习如何设计和优化基于电流模式控制的电源系统;③提高电源系统的性能指标,如效率、稳定性、响应速度等。 其他说明:文档不仅提供了理论和技术细节,还包括具体的设计实例和参数规格,有助于读者将理论应用于实际项目中。此外,文档强调了在设计过程中需要注意的常见问题和解决方案,如噪声抑制、同步技术和元件选择等。
python4delphi-master (2).zip
【实例简介】python4delphi-delphi调用python代码控件 delphi调用python代码控件,可以在delphi环境下,调用python代码,...git下载的 python4delphi 直接 install 会报各种错误,这里已修改好了 ,并附上简单使用说明 delphi7 python3.4.3测试正常,delphi其他版本未测试
自动化认识实习报告.docx
自动化认识实习报告.docx
如何查询摄像头的详细参数信息
资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在Android设备上,获取摄像头的详细信息是一个重要的功能,尤其是在开发与摄像头相关的应用程序时。对于像Samsung Galaxy Tab和Nexus S这样的设备,它们通常配备前置摄像头,因此能够准确获取摄像头信息显得尤为重要。在Android 2.3 SDK中,这一功能得到了显著增强。具体来说,在android.hardware.Camera类中,API Level 9引入了两个非常重要的方法。 其中一个方法是getNumberOfCameras,这是一个静态方法,用于获取设备上摄像头的数量。例如,Nexus S设备上有两个摄像头。这个方法的原型如下: 通过调用这个方法,开发者可以轻松地了解当前设备上摄像头的总数,从而为应用程序提供更精准的摄像头配置和功能支持。
C#
111,096
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章