色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

STM32嵌入式開發 ? 來源:STM32嵌入式開發 ? 作者:STM32嵌入式開發 ? 2020-11-20 10:14 ? 次閱讀

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

如果有些同學沒感覺到很香,有可能是沒有仔細和其它語言比較。

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

縱觀主流語言,C語言在語法上是以值類型為基礎,借助指針實現引用類型;而Python/Lua等語言,是以引用類型為基礎。

論性能和細節控制力,C語言的設計上限更高;但是論簡易程度,Python更為統一、易用。這一基本矛盾在之前的語言里都沒有解決好。

而C#很好的總結了前人的經驗,在基礎語法上就區分了值類型和引用類型。對初次接觸編程的同學來說這一點容易造成學習障礙,但是只要掌握了它,就會給實際工作帶來極大便利。

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

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

充分利用棧空間,非常高效,做了一部分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#最令人驚艷的一點。

一般來說數組長度較長,默認分配在堆上。但是C#也提供了便利的語法,在棧上分配數組,對項目后期優化來說簡直是神技:

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

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

良好的語法設計和庫函數設計,引導程序員寫出更快且更自然的代碼。

C#中最常用的容器List,也具有一些良好的設計,當然其它語言也有類似的優點:

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

list在預留空間充足時,添加元素不會產生GC。而且List和值類型結合使用,在內存占用上也有優勢。當然,很多其它語言也有類似的設計,可以說別的語言做的好的部分,C#做的也一樣好。

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

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

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

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

總之,C#語言及其標準庫的設計,非常值得借鑒和推崇。

C#的良好設計讓它在游戲開發領域走出了一條光明大道,在其它領域也有著越來越廣泛的應用。有C語言基礎的朋友可以快速上手C#,適合開發單片機上位機

責任編輯:lq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7604

    瀏覽量

    136707
  • C++
    C++
    +關注

    關注

    22

    文章

    2108

    瀏覽量

    73623
  • python
    +關注

    關注

    56

    文章

    4793

    瀏覽量

    84631

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

文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    不同類型adc的優缺點分析

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

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

    std::numeric_limits::max(),將產生 UB。 倘若你使用了類型推導,問題會更加明顯。
    的頭像 發表于 11-11 09:35 ?151次閱讀

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

    std::numeric_limits::max(),將產生 UB。 倘若你使用了類型推導,問題會更加明顯。
    的頭像 發表于 11-11 09:35 ?131次閱讀

    鴻蒙原生應用元服務開發-倉頡基礎數據類型元組類型

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

    鴻蒙原生應用元服務開發-倉頡基礎數據類型浮點類型

    區間類型用于表示擁有固定步長的序列,區間類型是一個泛型,使用Range 表示。當 T 被實例化不同的類型時(要求此類型必須支持關系操作符,并且可以和 Int64
    發表于 09-11 11:08

    鴻蒙原生應用元服務開發-倉頡基礎數據類型Unit與Nothing類型

    一、Unit 類型 對于那些只關心副作用而不關心的表達式,它們的類型是Unit。例如,print 函數、賦值表達式、復合賦值表達式、自增和自減表達式、循環表達式,它們的類型都是 Un
    發表于 09-06 15:43

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

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

    樹形控件為什么有一種是數組類型

    各位大神好!我在使用樹形控件過程中,發現有樹形控件由字符串類型變成了數組類型,兩個類型都可以使用樹型控件的屬性和調用節點,但兩個類型引用
    發表于 07-24 17:57

    STM32L0如何能做到一版軟件,兼容不同APN類型的SIM卡?

    問題介紹:使用的NB模組支持全網通,但是客戶使用會有兩種類型卡,即移動普通物聯網,apn“cmiot”和移動NB物聯網卡,apn“cmnbiot”。單片機軟件,只能每次寫一個APN去撥號注網,不同的APN每次分不同的軟件維護起來太麻煩。 求助:如何能做到一版軟件,兼容不同
    發表于 04-25 06:36

    鴻蒙TypeScript開發入門學習第3天:【TS基礎類型

    任意是 TypeScript 針對編程時類型不明確的變量使用的一種數據類型,它常用于以下三種情況。
    的頭像 發表于 03-28 15:02 ?532次閱讀
    鴻蒙TypeScript開發入門學習第3天:【TS基礎<b class='flag-5'>類型</b>】

    C語言數據類型有哪些

    C 語言中,數據類型指的是用于聲明不同類型的變量或函數的一個廣泛的系統。變量的類型決定變量存儲占用的空間,以及如何解釋存儲的位模式。
    發表于 03-20 10:56 ?469次閱讀
    <b class='flag-5'>C</b>語言數據<b class='flag-5'>類型</b>有哪些

    char是有符號類型還是無符號類型

    看一個C語言的筆試題,題目很簡單,問char是有符號類型還是無符號類型
    的頭像 發表于 03-17 10:15 ?1255次閱讀

    C語言如何掌握強制類型轉換的精髓

    強制類型轉換是把變量從一種類型轉換為另一種數據類型。例如,如果您想存儲一個 long 類型到一個簡單的整型中,您需要把 long
    的頭像 發表于 02-26 11:00 ?515次閱讀
    <b class='flag-5'>C</b>語言如何掌握強制<b class='flag-5'>類型</b>轉換的精髓

    arcgis類型與字段類型兼容

    ArcGIS是一個地理信息系統軟件,可以用來處理、分析和可視化地理數據。在ArcGIS中,類型和字段類型之間需要相互匹配,否則會導致不兼容的錯誤。 在ArcGIS中,
    的頭像 發表于 02-25 11:14 ?1634次閱讀

    鴻蒙原生應用/元服務開發-發布基礎類型通知類型與接口

    基礎類型通知主要應用于發送短信息、提示信息、廣告推送等,支持普通文本類型、長文本類型、多行文本類型和圖片類型。 表 基礎
    發表于 01-03 14:46
    主站蜘蛛池模板: 国产成人无码精品久久久按摩| 午夜福到在线2019| 亚洲欧美日韩另类精品一区二区三区 | 小小水蜜桃免费影院| 国产性夜夜春夜夜爽1A片 | 欧美另类z0z000高清| 成人在线视频在线观看| 无码国产欧美日韩精品| 精品欧美18videosex欧美| 2021乱码精品公司| 日本xxxxx按摩19| 国产色婷亚洲99精品AV在线| 伊人久久丁香色婷婷啪啪| 内射少妇36P亚洲区| 国产99久久九九免费精品无码| 亚州综人网| 久久综合色超碰人人| XXX老姥群交| 性xxxx直播放免费| 久久热国产在线视频| WWW亚洲精品久久久无码| 無码一区中文字幕少妇熟女H| 久久999视频| 阿离被扒开双腿疯狂输出| 午夜性伦鲁啊鲁免费视频| 久久婷婷五月综合色丁香花| qovd伦理| 亚洲国产日韩制服在线观看| 美女的隐私蜜桃传媒免费看| 高清无码色大片中文| 一级毛片两人添下面| 秋霞电影院兔费理论观频84mb| 国产亚洲精品a在线观看app| 最近中文字幕高清中文字幕MV| 日操夜操天天操| 中文人妻熟妇精品乱又伧| 久久国产香蕉视频| WWW久久只有这里有精品| 受喷汁红肿抽搐磨NP双性| 九九热在线视频观看这里只有精品| 99精品免费在线观看|