首页 新闻 会员 周边

C#语言支持的特性,.NET却不支持,那么C#不被.NET支持的部分又是如何在.NET上运行的呢?

0
悬赏园豆:5 [已解决问题] 解决于 2017-11-07 16:07

阅读《C#高级编程》系列丛书中,介绍C#与.NET的关系,提到C#是语言,.NET是平台(C#不是.NET的一部分),说”.NET支持的一些特性,C#并不支持“,这个可以理解,因为C#只是.NET平台支持的语言中的一种,并且.NET可以直接编写IL程序;但是又说”C#支持的一些特性,.NET并不支持“,这我就不理解,因为C#只能在.NET平台上运行,那C#支持的特性,.NET上不支持,程序是怎么运行的呢?求解!

问题补充:

大家的答案都倾向于”C#支持的一些特性,.NET并不支持“,编译后的事情。那这么理解会不会更好:.NET核心是CLR,CLR操作的是IL,.NET支持的特性就是IL的特性,IL是.NET平台所有语言的最小功能集,所以.NET并不支持C#所有特性,命题成立。

C#支持的特性,.NET上不支持,程序是怎么运行的呢?这个问题大家没证明出来呀?eg:运算符重载

猜测:C#不被.NET支持的特性能够在.NET运行,我怀疑或许可以归功于C#编译器,有可能是它把C#不被支持的特性拆分成几部分.NET支持的特性,那么C#不被支持的特性就可以运行了。

junlu的主页 junlu | 菜鸟二级 | 园豆:204
提问于:2017-11-05 23:43
< >
分享
最佳答案
0

你要分清楚语言、编译器和CLR的关系。

语言特性比如扩展方法,这东西时纯粹的属于编译器支持的特性,而CLR并不支持。CLR不支持的这部分都是属于编译器特性,俗称语法糖。

但是CLR支持的仅返回类型不同其他都相同的方法重载,而C#并不支持。CLR支持的这部分属于IL的能力范围,但是C#并没有实现IL所支持的所有特性。

收获园豆:5
Timetombs | 老鸟四级 |园豆:3954 | 2017-11-06 20:24
junlu | 园豆:204 (菜鸟二级) | 2017-11-07 16:25
其他回答(3)
0

"这我就不理解,因为C#只能在.NET平台上运行"

后半句不对

西漠以西 | 园豆:1675 (小虾三级) | 2017-11-06 08:50

C#目前运行环境是只有.NET平台的呀?

支持(0) 反对(0) junlu | 园豆:204 (菜鸟二级) | 2017-11-06 10:57

@junlu: mono,.net core甚至其他脚本

支持(1) 反对(0) 花飘水流兮 | 园豆:13560 (专家六级) | 2017-11-06 12:44

@花飘水流兮: 嗯嗯,是我不对

支持(0) 反对(0) junlu | 园豆:204 (菜鸟二级) | 2017-11-06 14:19
0

c#编译后生成.net运行时,编译后与c#没有关系了,可以反编译c#或者VB.net等

Pharaoh | 园豆:202 (菜鸟二级) | 2017-11-06 09:34

编译后的结果,C#的特性(运算符重载)转化成.NET所支持的东西,但是使用IL直接操作.NET是不能实现C#的特性(运算符重载),这么理解对吧?

支持(0) 反对(0) junlu | 园豆:204 (菜鸟二级) | 2017-11-06 10:56
0

.net家族下所有语言,只要都遵循CLI规则,最后在CLR层面运行都是一样的。运行时不是看语言了而是看虚拟机,编译后不管你是c#还是f#都一样。

Daniel Cai | 园豆:10424 (专家六级) | 2017-11-06 10:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册