我現在發現很多人對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#現在可以開發除了系統驅動以外的任何程序,在各個領域都有非常成熟的解決方案,並且早已全面開源!