99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C#良好兼容了值類型/引用類型

STM32嵌入式開發(fā) ? 來源:STM32嵌入式開發(fā) ? 作者:STM32嵌入式開發(fā) ? 2020-11-20 10:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

很多游戲開發(fā)者都是由于Unity而“被迫”使用C#的。但用過一段時(shí)間,都會(huì)由衷贊嘆:真香。

如果有些同學(xué)沒感覺到很香,有可能是沒有仔細(xì)和其它語(yǔ)言比較。

C#良好兼容了值類型/引用類型,在發(fā)展中逐步解決了其他高級(jí)語(yǔ)言沒解決好的問題。

縱觀主流語(yǔ)言,C語(yǔ)言在語(yǔ)法上是以值類型為基礎(chǔ),借助指針實(shí)現(xiàn)引用類型;而Python/Lua等語(yǔ)言,是以引用類型為基礎(chǔ)。

論性能和細(xì)節(jié)控制力,C語(yǔ)言的設(shè)計(jì)上限更高;但是論簡(jiǎn)易程度,Python更為統(tǒng)一、易用。這一基本矛盾在之前的語(yǔ)言里都沒有解決好。

而C#很好的總結(jié)了前人的經(jīng)驗(yàn),在基礎(chǔ)語(yǔ)法上就區(qū)分了值類型和引用類型。對(duì)初次接觸編程的同學(xué)來說這一點(diǎn)容易造成學(xué)習(xí)障礙,但是只要掌握了它,就會(huì)給實(shí)際工作帶來極大便利。

反觀歷史,C#也曾經(jīng)因?yàn)?值類型/引用類型 保守詬病,“拆箱”和“裝箱”一直是個(gè)招黑的設(shè)計(jì)。但后來我們看到,隨著泛型的成熟和普及,隨著泛型容器代替通用容器,裝箱和拆箱的問題已經(jīng)在很大程度上解決了。

還有對(duì)異步的支持等等,C#的設(shè)計(jì)最初帶來了一些問題,但是最終還是交上了一份滿意的答卷。

充分利用棧空間,非常高效,做了一部分C/C++擅長(zhǎng)的事。

值類型有一大特點(diǎn),就是能充分利用??臻g。高級(jí)語(yǔ)言的GC特性一直飽受詬病,但下面的Unity常見代碼,運(yùn)行時(shí)沒有GC:

// 通過輸入的三維向量,移動(dòng)物體的位置void Move(Vector3 input){ // 演示代碼,有意分成很多行 input = input.normalized; Vector3 move = input * 2.0f; move *= Time.deltaTime. transform.position += move; }

這段代碼沒有在堆上分配空間,你所看到的操作全都是在棧上進(jìn)行的,GC壓力為0。我認(rèn)為這是C#最令人驚艷的一點(diǎn)。

一般來說數(shù)組長(zhǎng)度較長(zhǎng),默認(rèn)分配在堆上。但是C#也提供了便利的語(yǔ)法,在棧上分配數(shù)組,對(duì)項(xiàng)目后期優(yōu)化來說簡(jiǎn)直是神技:

public void unsafe foo(){ int* bar = stackalloc int [10];}

沒錯(cuò),C#依然保留了指針,但一般僅用于局部的unsafe代碼。在局部熱點(diǎn)可以完全解放性能。

良好的語(yǔ)法設(shè)計(jì)和庫(kù)函數(shù)設(shè)計(jì),引導(dǎo)程序員寫出更快且更自然的代碼。

C#中最常用的容器List,也具有一些良好的設(shè)計(jì),當(dāng)然其它語(yǔ)言也有類似的優(yōu)點(diǎn):

// 新建一個(gè)list,長(zhǎng)度為0。但在堆中預(yù)留10萬(wàn)個(gè)位置 List list = new List(100000); // 加入很多元素,由于容量足夠沒有GC for (int i=0; i<89000; i++) { list.Add(i); } // 用過以后清空l(shuí)ist,長(zhǎng)度變成0 list.Clear(); // 但容量還是10萬(wàn),繼續(xù)增加元素還是沒有GC for (int i = 0; i < 99000; i++) { list.Add(i); }

list在預(yù)留空間充足時(shí),添加元素不會(huì)產(chǎn)生GC。而且List和值類型結(jié)合使用,在內(nèi)存占用上也有優(yōu)勢(shì)。當(dāng)然,很多其它語(yǔ)言也有類似的設(shè)計(jì),可以說別的語(yǔ)言做的好的部分,C#做的也一樣好。

繼承、泛型、接口、類型約束等等高級(jí)特性,都有著良好且自洽的設(shè)計(jì)。

最初接觸C#的時(shí)候,看看int的原型,收獲很大:

public struct Int32 : IFormattable, IConvertible, IComparable, IComparable, IEquatable { // .... }

熟悉C++的人,經(jīng)過思考,可以很好的理解IComparable、IEquatable以及它們的泛型形式。同時(shí)也能猜出“Interface”的概念。思考C#的底層設(shè)計(jì),給人的感覺就是自然、規(guī)范、恰到好處。

總之,C#語(yǔ)言及其標(biāo)準(zhǔn)庫(kù)的設(shè)計(jì),非常值得借鑒和推崇。

C#的良好設(shè)計(jì)讓它在游戲開發(fā)領(lǐng)域走出了一條光明大道,在其它領(lǐng)域也有著越來越廣泛的應(yīng)用。有C語(yǔ)言基礎(chǔ)的朋友可以快速上手C#,適合開發(fā)單片機(jī)上位機(jī)

責(zé)任編輯:lq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141759
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2119

    瀏覽量

    75318
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4827

    瀏覽量

    86753

原文標(biāo)題:用過C#的都說香,也送你一份秘籍

文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    可以在哪里修改以更改非 PD 類型 C 中不同的 Rp 等級(jí)?

    到 ccg3pa 時(shí)更改 rp 的方法 在那個(gè) non_pd_type_C 文件中,我首先設(shè)置那個(gè) Rp 等級(jí),然后在設(shè)置為 C 類型之后將其設(shè)置為非 PD
    發(fā)表于 05-27 07:16

    總線接口的類型與選擇指南

    類型:異步、全雙工串口總線。 特性:有兩根線,一根TXD用于發(fā)送,一根RXD用于接收。不需要時(shí)鐘信號(hào)來同步傳輸,而是依賴于發(fā)送設(shè)備和接收設(shè)備之間預(yù)定義的配置。 I2C總線 類型:同步、半雙工雙向的兩線式串口總線。 特性:由串
    的頭像 發(fā)表于 12-31 10:06 ?1437次閱讀

    不同類型adc的優(yōu)缺點(diǎn)分析

    ADC) 優(yōu)點(diǎn) 高精度 :SAR ADC通常提供較高的分辨率,適合需要高精度測(cè)量的應(yīng)用。 低功耗 :與某些其他類型的ADC相比,SAR ADC在低至中等采樣率下功耗較低。 成本效益 :對(duì)于許多應(yīng)用來說,SAR ADC提供良好
    的頭像 發(fā)表于 11-19 16:58 ?2902次閱讀

    如何使用C++20比較不同類型的整型

    std::numeric_limits::max(),將產(chǎn)生 UB。 倘若你使用了類型推導(dǎo),問題會(huì)更加明顯。
    的頭像 發(fā)表于 11-11 09:35 ?495次閱讀

    如何使用C++20比較不同類型的整型

    std::numeric_limits::max(),將產(chǎn)生 UB。 倘若你使用了類型推導(dǎo),問題會(huì)更加明顯。
    的頭像 發(fā)表于 11-11 09:35 ?532次閱讀

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉(cāng)頡基礎(chǔ)數(shù)據(jù)類型字符類型

    字符類型使用 Rune 表示,可以表示 Unicode 字符集中的所有字符。 字符類型字面量 字符類型字面量有三種形式:?jiǎn)蝹€(gè)字符、轉(zhuǎn)義字符和通用字符。一個(gè) Rune 字面量由字符 r 開頭,后跟一個(gè)
    發(fā)表于 09-19 10:58

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉(cāng)頡基礎(chǔ)數(shù)據(jù)類型整數(shù)類型

    ,如果它的超出了上下文要求的整數(shù)類型的表示范圍,編譯器將會(huì)報(bào)錯(cuò)。 let x: Int8 = 128 // Error, 128 out of the range of Int8 let y
    發(fā)表于 09-13 14:55

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉(cāng)頡基礎(chǔ)數(shù)據(jù)類型元組類型

    二元,例如,(Int64, Float64) 表示一個(gè)二元組類型,(Int64, Float64, String) 表示一個(gè)三元組類型。 元組的長(zhǎng)度是固定的,即一旦定義一個(gè)元組類型
    發(fā)表于 09-12 11:02

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉(cāng)頡基礎(chǔ)數(shù)據(jù)類型浮點(diǎn)類型

    區(qū)間類型用于表示擁有固定步長(zhǎng)的序列,區(qū)間類型是一個(gè)泛型,使用Range 表示。當(dāng) T 被實(shí)例化不同的類型時(shí)(要求此類型必須支持關(guān)系操作符,并且可以和 Int64
    發(fā)表于 09-11 11:08

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉(cāng)頡基礎(chǔ)數(shù)據(jù)類型浮點(diǎn)類型

    浮點(diǎn)類型包括 Float16、 Float32 和 Float64,分別用于表示編碼長(zhǎng)度為 16-bit、 32-bit 和 64-bit 的浮點(diǎn)數(shù)(帶小數(shù)部分的數(shù)字,如 3.14159、8.24
    發(fā)表于 09-10 10:22

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉(cāng)頡基礎(chǔ)數(shù)據(jù)類型Unit與Nothing類型

    一、Unit 類型 對(duì)于那些只關(guān)心副作用而不關(guān)心的表達(dá)式,它們的類型是Unit。例如,print 函數(shù)、賦值表達(dá)式、復(fù)合賦值表達(dá)式、自增和自減表達(dá)式、循環(huán)表達(dá)式,它們的類型都是 Un
    發(fā)表于 09-06 15:43

    貼片電感使用類型如何選擇?

    在選擇貼片電感的使用類型時(shí),需要考慮多個(gè)因素,以確保所選電感能夠滿足應(yīng)用需求。以下是一些關(guān)鍵的選擇原則: 一、應(yīng)用需求 工作頻率: 不同的貼片電感類型適用于不同的工作頻率范圍。例如,鐵氧體芯片電感
    的頭像 發(fā)表于 08-07 15:35 ?789次閱讀
    貼片電感使用<b class='flag-5'>類型</b>如何選擇?

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

    C語(yǔ)言中,數(shù)據(jù)類型和變量是編程的基礎(chǔ),也是理解更復(fù)雜概念的關(guān)鍵。數(shù)據(jù)類型決定變量的內(nèi)存分配、存儲(chǔ)范圍和操作方式,而變量則是存儲(chǔ)數(shù)據(jù)的容器。本篇文章將從基本數(shù)據(jù)
    的頭像 發(fā)表于 07-26 17:53 ?2751次閱讀
    技術(shù)干貨驛站 ▏深入理解<b class='flag-5'>C</b>語(yǔ)言:基本數(shù)據(jù)<b class='flag-5'>類型</b>和變量

    樹形控件為什么有一種是數(shù)組類型

    各位大神好!我在使用樹形控件過程中,發(fā)現(xiàn)有樹形控件由字符串類型變成了數(shù)組類型,兩個(gè)類型都可以使用樹型控件的屬性和調(diào)用節(jié)點(diǎn),但兩個(gè)類型引用
    發(fā)表于 07-24 17:57

    石英晶體切割類型與頻率的關(guān)系

    今天這節(jié)課,讓我們來了解一下石英晶體切割類型與頻率的關(guān)系,所謂晶體切割類型,就是對(duì)晶體坐標(biāo)軸某種取向的切割。石英晶片的切割類型有很多種,不同的切型其物理性質(zhì)不同,頻率范圍也不同,切面的方向與主軸的夾角對(duì)其性能有重要影響,比如:頻
    的頭像 發(fā)表于 07-22 17:19 ?1090次閱讀
    石英晶體切割<b class='flag-5'>類型</b>與頻率的關(guān)系