我现在发现很多人对C#还存在很大的误解,例如C#是完全封闭的,C#不能跨平台,C#性能很差,C#不支持指针等等,持以上观点的人非常多,甚至最近看到的国内某机构对开发语言的统计中还写着C#不跨平台,不开源,所以想在此普及一下常识。

1.C#是完全开源的,不但开源,而且微软开源的库都是基于MIT许可证的,也就是说,你可以免费使用并修改代码,修改后可以闭源,只需保留作者信息即可,这可以说是最宽松的开源许可

2.C#是完全可以跨平台的,mono现在已经非常成熟,随着去年微软对.net的全面开源,mono已经采用了大量微软官方的源码,完全实现最新的.net framework4.6,功能非常全面。在游戏领域Unity3d,移动开发领域Xamarin,都是基于mono的,都是完全跨平台的,Unity3d更是支持26种操作系统,现在Linux上部署asp.net网站也更加方便,连mono都不需要安装就可以运行。而且跨平台不止mono,还有微软自己的.net core,Unity3d更是开发出了IL2CPP这种逆天的东西,以后C#都可以摒弃虚拟机直接运行在所有平台上了,所以说跨平台是肯定的,而且跨得很好!

3.C#的性能也是非常好的,我专门做过测试,如果对比基础数学运算与C++完全一样,图形方面也能达到C++的70%,看.net库底层代码是大量的指针和原生函数调用,性能自然没问题,关于内存占用,你用了其他虚拟机语言后再来评论C#不迟

4.总有人问C#调用C++dll的各种问题,尤其是类型转换上,我想说,C#是支持指针的,你C++怎么写,C#就怎么写即可,这有什么难的吗?而且很多需要高性能的地方,也可以用指针实现,有些地方用了指针后性能提升能超过1000倍,所以指针的使用也很重要的,但竟然还是有这么多人不知道C#有指针的存在!

5.单独说下Xamarin,现在Xamarin已经完全开源免费,人们开始想尝试使用Xamarin,但总觉得资料少,甚至有人说只能搜到个helloworld的示例,其他都没有,如果开发比较复杂的app就不行了,但我想说,首先Xamarin官网上有大量的资料,非常全面,IO,数据库,网络通信,界面开发等等都有很详尽的教程,nuget上60多万个库,足够你做出一个像样的APP,其次,Xamarin是提供给你直接调用java和OC方法的方式的,使用也非常简便,再次,你真的需要某些特殊的东西,搜索Xamarin找不到相应的解决方案(这里拿android举例),那么好,直接搜android的解决方案即可,由于android的所有API Xamarin都是实现了的(早在4月8日就已经支持Android N了),所以你直接把要用的java代码粘过来即可,类库名称,函数名称,参数类型,各类东西都没变,只有很少的一部分语法,例如属性和foreach等需要稍微改改,就可以直接用java的代码,界面就更不用说了,唯一需要变的就是.xml改为.axml,剩下的都不用改,我真心想知道有什么是不能做的呢?Xamarin只不过给你多增加了一套C#的API,例如你既可以用System.IO.StringBuilder也可以用Java.Lang.StringBuilder,对于开发来说与用java做Android原生开发没有任何区别,所以说Android的资料可以直接拿来用,而Xamarin只是让你多了一种选择而已,在此之上业务逻辑部分iOS与android可以通用,甚至用Xamarin.Form让你的界面也可以跨平台

说了这么多,我只希望人们对C#的认识能够真正的改变,还是那句话,C#现在可以开发除了系统驱动以外的任何程序,在各个领域都有非常成熟的解决方案,并且早已全面开源!

05-11 15:47