【C#學習】01--基本概念

来源:https://www.cnblogs.com/90Red/archive/2023/03/31/17265885.html
-Advertisement-
Play Games

1.1 關於C# C#只是一種簡單安全的新型面向對象語言,繼承了C的語法風格和C++的面向對象特性,不再提供對指針類型的支持(因此程式不可隨便訪問記憶體地址空間)、不再支持多重繼承; C#的誕生意義是生成面向.NET Framework環境的代碼,身為編程語言的一種,它作為開發工具而存在,本身並不是. ...


1.1 關於C#

  C#只是一種簡單安全的新型面向對象語言,繼承了C的語法風格和C++的面向對象特性,不再提供對指針類型的支持(因此程式不可隨便訪問記憶體地址空間)、不再支持多重繼承;

  C#的誕生意義是生成面向.NET Framework環境的代碼,身為編程語言的一種,它作為開發工具而存在,本身並不是.NET的一部分;

  .NET Framework為C#提供了程式設計環境,CLR為C#程式語言提供了一個托管的運行時環境。

  C#的特點:

  1.簡潔
  2.自由
  3.繼承了C++的強大功能
  4.強大的Web伺服器控制項
  5.支持跨平臺
  6.與XML(Extensible Markup Language, 可擴展標記語言,用於標記電子文件使其具有結構性)相融合

1.2 相關概念

1.2.1 .NET Framework平臺
  一個集成的(integrated)、面向對象的(object-oriented)的開發平臺,以公共語言運行時/公共語言運行庫(Common Language Runtime, 簡稱CLR)為基礎,主要由CLR和.NET Framework基礎類庫(Base Class Library, 簡稱BCL)兩部分組成。C#語言及其編譯、運行依賴的主體。

補充:.NET Framework的定位與內部層級
  .NET Framework介於操作系統和應用程式之間,負責管理運行在.NET Framework上的各種應用程式;

  .NET應用程式並不依賴於操作系統,只依賴於.NET Framework;
  底層是CLR,CLR的上層是基礎類庫BCL(主要作用就是為.NET程式開發提供常用類庫),在BCL的上一層是Windows窗體、ASP.NET等模塊(用於開發包括桌面應用程式、網路應用程式等在內的各種應用程式)。

1.2.2 CLR(Common Language Runtime)公共語言運行時、公共語言庫、.NET運行時
  .NET Framework的執行環境,也是.NET Framework的核心;
  主要負責管理.NET應用程式的編譯、運行以及一些基礎服務,為.NET應用程式提供了一個虛擬的運行環境;
  同時還負責為應用程式提供記憶體分配、線程管理、垃圾回收等服務;
  對代碼實施安全檢查(在CLR控制下運行的代碼-托管代碼Managed Code)相比較C/C++程式開發時需要手動管理、釋放記憶體,.NET Framework將這些操作自動化了,這就是.NET Framework的顯著優點,但自動化的同時也導致了性能的降低。

1.2.3 CTS(Common Type System)通用類型系統
  .NET將各種不同編程語言的數據類型進行抽象誕生了CTS。不同的編程語言在.NET Framework上經過編譯後都轉換成了CTS類型,為不同語言的變數相互交換信息提供了保證,這就是.NET Framework支持混合語言編程的基本原理。
例如:Virsual Basic.NET定義的Integer數據類型 和 C#中定義的int類型,在 .NET Framework中都會被轉換成一樣的System.Int32數據類型。

1.2.4 CLS(Common Language Specification)公共語言規範
  CTS的子集,.NET平臺上編寫的對象之間實現互相調用、語言的互操作性實現的前提;
  CLS是一個最低標準集,所有面向.NET的編譯器都支持CLS;
  CTS和CLS一起確保語言的互操作性。

1.2.5 CIL(Common Intermediate Language)通用中間語言,簡稱中間語言
  C#程式第一次編譯後生成的托管代碼(Managed Code),與處理器的指令集很相似(指令集:處理器/CPU 中用來計算和控制電腦系統的一套指令的集合);
  類似於不同編程語言中定義的數據類型在.NET Framework中都會被編譯為CTS類型,不同的編程語言在.NET Framework上都會被編譯為CIL;
  CIL為.NET的語言互操作性提供了支持。

1.3 C#程式運行原理

   C#程式運行主要分為兩個階段:編譯期和運行期,這兩個階段中各進行一次編譯

1.3.1 編譯期(第一次編譯)

  由CLR中的C#編譯器對C#代碼進行編譯,輸出由CIL為內容語言形式的.dll文件或.exe文件

1.3.2 運行期(第二次編譯)

  CLR針對目前特定的硬體環境通過編譯器(即時編譯器)將CIL即時編譯(JIT)為本機代碼並執行

  編譯為本機代碼後的代碼會被自動存入緩衝區,下次使用相同代碼將直接從緩衝區中調用,因此相同的代碼只編譯一次,由此提高了程式運行的速度

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一 回顧trait使用 https://blog.csdn.net/bushuwei/article/details/103514174發現之前本人說明很模糊,自己居然不知道為什麼其實這裡的$c,就是class B再次回顧邏輯 二 分析 self和static區別說的沒毛病 Trait基類use t ...
  • 一、函數的定義 可以分為以下兩種: 1、函數聲明和函數定義分離 這種方法將函數聲明和函數定義分開,通常在頭文件中先聲明函數原型,然後在源文件中實現函數定義。 例如,頭文件 example.h 中聲明瞭一個函數 add: #ifndef EXAMPLE_H #define EXAMPLE_H int ...
  • 一.scoket基本介紹 1.scoket簡介(以下是來自chatgpt回答) 1)Socket(套接字)是電腦網路中用於描述主機之間通信的一種機制。它定義了一種標準的介面, 使得應用程式可以利用網路傳輸層提供的服務(如TCP或UDP)進行通信。 2)Socket的作用是在網路應用程式之間提供數據 ...
  • if __name__ == "__main__" 也就是說執行當前文件,不調用模塊的時候__name__=__main__ 調用模塊的時候,測試如下: 1、新建 test01.py 文件測試代碼如下 print("這條消息來自test01") def func(): print('hello, w ...
  • 數字常量 int: 一般的整數, long: 長整型,2.x版本需在數字後加 “L” 或 “l” ,表示長整型 如 100000000L; python3.x 版本後不分長整型,統一為int,不可加 “L” 或 “l” float: 浮點數,1.0 也為浮點數,float 可強制轉換為 int,取整 ...
  • 使用方法 安裝 Maven <dependency> <groupId>com.github.yulichang</groupId> <artifactId>mybatis-plus-join</artifactId> <version>1.2.4</version> </dependency> G ...
  • 前置要求:有百度賬號,實名認證以及開發者認證,創建應用並獲取到關鍵憑證:Appid、Appkey、Secretkeyk和Signkey 平臺上入門十分清楚,直接對著逐步操作即可,個人開發者審核也很快 百度網盤開放平臺地址如下:https://pan.baidu.com/union/doc/nksg0 ...
  • 往一張產品圖片上,加兩個小標簽,Demo實現最好的效果 素材例圖與最終效果如下: 具體實現的代碼如下: 添加引用: using System.Drawing; using System.Drawing.Drawing2D; 註意:如果添加命名空間沒效果,加一下Nuget包 System.Drawin ...
一周排行
    -Advertisement-
    Play Games
  • 前言 插件化的需求主要源於對軟體架構靈活性的追求,特別是在開發大型、複雜或需要不斷更新的軟體系統時,插件化可以提高軟體系統的可擴展性、可定製性、隔離性、安全性、可維護性、模塊化、易於升級和更新以及支持第三方開發等方面的能力,從而滿足不斷變化的業務需求和技術挑戰。 一、插件化探索 在WPF中我們想要開 ...
  • 歡迎ReaLTaiizor是一個用戶友好的、以設計為中心的.NET WinForms項目控制項庫,包含廣泛的組件。您可以使用不同的主題選項對項目進行個性化設置,並自定義用戶控制項,以使您的應用程式更加專業。 項目地址:https://github.com/Taiizor/ReaLTaiizor 步驟1: ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • Channel 是乾什麼的 The System.Threading.Channels namespace provides a set of synchronization data structures for passing data between producers and consume ...
  • efcore如何優雅的實現按年分庫按月分表 介紹 本文ShardinfCore版本 本期主角: ShardingCore 一款ef-core下高性能、輕量級針對分表分庫讀寫分離的解決方案,具有零依賴、零學習成本、零業務代碼入侵適配 距離上次發文.net相關的已經有很久了,期間一直在從事java相關的 ...
  • 前言 Spacesniffer 是一個免費的文件掃描工具,通過使用樹狀圖可視化佈局,可以立即瞭解大文件夾的位置,幫助用戶處理找到這些文件夾 當前系統C盤空間 清理後系統C盤空間 下載 Spacesniffer 下載地址:https://spacesniffer.en.softonic.com/dow ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • 一、ReZero簡介 ReZero是一款.NET中間件 : 全網唯一開源界面操作就能生成API , 可以集成到任何.NET6+ API項目,無破壞性,也可讓非.NET用戶使用exe文件 免費開源:MIT最寬鬆協議 , 一直從事開源事業十年,一直堅持開源 1.1 純ReZero開發 適合.Net Co ...
  • 一:背景 1. 講故事 停了一個月沒有更新文章了,主要是忙於寫 C#內功修煉系列的PPT,現在基本上接近尾聲,可以回頭繼續更新這段時間分析dump的一些事故報告,有朋友微信上找到我,說他們的系統出現了大量的http超時,程式不響應處理了,讓我幫忙看下怎麼回事,dump也抓到了。 二:WinDbg分析 ...
  • 開始做項目管理了(本人3年java,來到這邊之後真沒想到...),天天開會溝通整理需求,他們講話的時候忙裡偷閑整理一下常用的方法,其實語言還是有共通性的,基本上看到方法名就大概能猜出來用法。出去打水的時候看到外面太陽好好,真想在外面坐著曬太陽,回來的時候好兄弟三年前送給我的鍵盤D鍵不靈了,在打"等待 ...