C#显眼的扭曲特性

C# 读作 C Sharp,是微软开发的一门编程语言,通用在各种windows平台,最近也以.Net core的形式在其他平台上流行。

C# 运行在CLR上,这是一个开放的虚拟机,微软出品。在其上存在众多编程语言,C++ ,VB.Net, Python, Ruby, ……。

本人学习的编程语言也算不少了,如今温习C#,将感悟放在这里。

C# 编程语言模仿了Java编程语言,同时拥有不小的区别,例如,为了与CLR上运行的众多编程语言进行交互,C# 引入了众多特性,包括 C++ namespace。而不是java 的package机制,C# 引入了C++ 的引用传递方式,在函数的形参列表上采用了ref和out标志。这些都是不同,具体如何,是否好用还是要看各位的理解。

C# 引入了委托(Delegate)与Java的委托不同的是,C#明显的采用了C++的函数指针形式。而在WPF中,C#编程居然采用了MFC类似的消息路由机制,而不是简单有效的监听器模式,实在是让人无语。有啥好的。难道只是为了与Java区分开,避免说抄袭的问题?

C#在语言中竟然保留了结构体这种概念,而且还可以包含函数,明显是从C++中引入,这有什么意义呢?单纯定义一个完全public权限的类不好么?虽然struct是值属性的,但是这对我们有什么用,如果struct中使用了引用类型那么简单的复制不也就失败了么?面向对象的类进行简单的等号复制基本没什么意义。

C# 在类定义中引入了字段和属性的区别,这是Java中没有的,确实有一点用属性在C#中外在表现与字段是相同的,而本质上是一族setter和getter存取器方法,想法不错,能够提供额外的兼容性,有助于老代码的升级,但是在调试中是否会因为在存取器中添加的额外的语句出现难以找到的错误,就好比提供了错误的值,却产生了正确的结果。或者更严重的反过来。

在C#中不仅仅有构造函数,相应的添加了析构函数,这从C++中引入的东西挺乱的,Java中有类似的结构,但是是一个特殊接口,需要额外努力实现,这两者都面临着相同的问题,那就是垃圾回收的时间是不确定的。C#为了兼容C++的特性,也为了增强手动内存管理能力,在语言中添加了一个特殊接口IDisposable,配合using声明确实可以提供手动管理能力,但是无疑增加了复杂性。

还有C#不仅有静态方法,静态字段,静态属性之外,还允许定义静态类,这个东西比较诡异,让人无法理解。

另外C#提供的多态机制完全学习了C++,甚至还不如。面向对象的OOP中,如果子类需要覆盖超类的方法,需要的是在超类中明显的声明virtual字段,在子类中明显声明overide声明,否则多态机制是不可用的,相对于Java而言,简直是一种倒退,Java可是默认提供多态机制的,而且子类可以覆盖任意超类方法。C#是默认不提供多态机制的,需要显式的声明那些方法可以实现多态。实在是让人无语。

C#相比Java是提供运算符重载命令的,这种方式提升了语言的复杂性啊,为了照顾C++,实在是无语。

C# 对于OOP的类关系的创新也是绝了,故意区分包含于集合,有意思么?

C#的接口中可以定义属性(不是字段)可以理解,毕竟是一种简略的方法,这算是一种进步吧。C#的接口居然需要利用new覆盖老接口的方法简直让人无语,在那个接口实现不是觉实现为什么非得在派生接口中覆盖超类接口中的方法?感觉这就是CLR实现过程中埋得雷,必须利用更多的补丁才能够弥补。ugly。

在基类中实现接口然后再利用继承和多态让子类被动实现了接口么?这么做有什么意义么?

继续看书,有体会会持续更新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值