很多游戲開發(fā)者都是由于Unity而“被迫”使用C#的。但用過一段時間,都會由衷贊嘆:真香。
如果有些同學沒感覺到很香,有可能是沒有仔細和其它語言比較。
C#良好兼容了值類型/引用類型,在發(fā)展中逐步解決了其他高級語言沒解決好的問題。
縱觀主流語言,C語言在語法上是以值類型為基礎(chǔ),借助指針實現(xiàn)引用類型;而Python/Lua等語言,是以引用類型為基礎(chǔ)。
論性能和細節(jié)控制力,C語言的設(shè)計上限更高;但是論簡易程度,Python更為統(tǒng)一、易用。這一基本矛盾在之前的語言里都沒有解決好。
而C#很好的總結(jié)了前人的經(jīng)驗,在基礎(chǔ)語法上就區(qū)分了值類型和引用類型。對初次接觸編程的同學來說這一點容易造成學習障礙,但是只要掌握了它,就會給實際工作帶來極大便利。
反觀歷史,C#也曾經(jīng)因為 值類型/引用類型 保守詬病,“拆箱”和“裝箱”一直是個招黑的設(shè)計。但后來我們看到,隨著泛型的成熟和普及,隨著泛型容器代替通用容器,裝箱和拆箱的問題已經(jīng)在很大程度上解決了。
還有對異步的支持等等,C#的設(shè)計最初帶來了一些問題,但是最終還是交上了一份滿意的答卷。
充分利用棧空間,非常高效,做了一部分C/C++擅長的事。
值類型有一大特點,就是能充分利用棧空間。高級語言的GC特性一直飽受詬病,但下面的Unity常見代碼,運行時沒有GC:
// 通過輸入的三維向量,移動物體的位置void Move(Vector3 input){ // 演示代碼,有意分成很多行 input = input.normalized; Vector3 move = input * 2.0f; move *= Time.deltaTime. transform.position += move; }
這段代碼沒有在堆上分配空間,你所看到的操作全都是在棧上進行的,GC壓力為0。我認為這是C#最令人驚艷的一點。
一般來說數(shù)組長度較長,默認分配在堆上。但是C#也提供了便利的語法,在棧上分配數(shù)組,對項目后期優(yōu)化來說簡直是神技:
public void unsafe foo(){ int* bar = stackalloc int [10];}
沒錯,C#依然保留了指針,但一般僅用于局部的unsafe代碼。在局部熱點可以完全解放性能。
良好的語法設(shè)計和庫函數(shù)設(shè)計,引導(dǎo)程序員寫出更快且更自然的代碼。
C#中最常用的容器List,也具有一些良好的設(shè)計,當然其它語言也有類似的優(yōu)點:
// 新建一個list,長度為0。但在堆中預(yù)留10萬個位置 List
list在預(yù)留空間充足時,添加元素不會產(chǎn)生GC。而且List和值類型結(jié)合使用,在內(nèi)存占用上也有優(yōu)勢。當然,很多其它語言也有類似的設(shè)計,可以說別的語言做的好的部分,C#做的也一樣好。
繼承、泛型、接口、類型約束等等高級特性,都有著良好且自洽的設(shè)計。
最初接觸C#的時候,看看int的原型,收獲很大:
public struct Int32 : IFormattable, IConvertible, IComparable, IComparable
熟悉C++的人,經(jīng)過思考,可以很好的理解IComparable、IEquatable以及它們的泛型形式。同時也能猜出“Interface”的概念。思考C#的底層設(shè)計,給人的感覺就是自然、規(guī)范、恰到好處。
總之,C#語言及其標準庫的設(shè)計,非常值得借鑒和推崇。
C#的良好設(shè)計讓它在游戲開發(fā)領(lǐng)域走出了一條光明大道,在其它領(lǐng)域也有著越來越廣泛的應(yīng)用。有C語言基礎(chǔ)的朋友可以快速上手C#,適合開發(fā)單片機的上位機。
責任編輯:lq
-
C語言
+關(guān)注
關(guān)注
180文章
7630瀏覽量
140552 -
C++
+關(guān)注
關(guān)注
22文章
2117瀏覽量
74825 -
python
+關(guān)注
關(guān)注
56文章
4825瀏覽量
86268
原文標題:用過C#的都說香,也送你一份秘籍
文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
可以在哪里修改以更改非 PD 類型 C 中不同的 Rp 等級?
總線接口的類型與選擇指南
不同類型adc的優(yōu)缺點分析
如何使用C++20比較不同類型的整型值
如何使用C++20比較不同類型的整型值
鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉頡基礎(chǔ)數(shù)據(jù)類型字符類型
鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉頡基礎(chǔ)數(shù)據(jù)類型整數(shù)類型
鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉頡基礎(chǔ)數(shù)據(jù)類型元組類型
鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉頡基礎(chǔ)數(shù)據(jù)類型浮點類型
鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉頡基礎(chǔ)數(shù)據(jù)類型浮點類型
鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉頡基礎(chǔ)數(shù)據(jù)類型Unit與Nothing類型
貼片電感使用類型如何選擇?

技術(shù)干貨驛站 ▏深入理解C語言:基本數(shù)據(jù)類型和變量

樹形控件為什么有一種是數(shù)組類型
石英晶體切割類型與頻率的關(guān)系

評論