【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
  • 人臉識別技術在現代社會中扮演著越來越重要的角色,比如人臉識別門禁、人臉識別支付、甚至人臉識別網站登錄等。 最近有群友問.NET有沒有人臉識別的組件,小編查閱相關資料介紹下麵幾種.NET人臉識別組件供大家參考。 **1、Microsoft Azure Face API** 簡介:Microsoft A ...
  • # 1. 與 .NET Core 緩存的關係和差異 ABP 框架中的緩存系統核心包是 [Volo.Abp.Caching](https://www.nuget.org/packages/Volo.Abp.Caching) ,而對於分散式緩存的支持,abp 官方提供了基於 Redis 的方案,需要安裝 ...
  • 最近ET做熱更重載dll的時候,返回登陸會重新檢測新的dll,首次登錄之前已經Assembly.Load()過一次dll,第二次返回登陸再次load dll到記憶體中,Invoke執行方法的時候,異常了,有些方法執行了,有些未執行,於是查資料,看到些老資料說Assembly.Load重覆載入同名dll ...
  • 1. 擴展方法 擴展方法使你能夠向現有類型“添加”方法,而無需創建新的派生類型、重新編譯或以其他方式修改原始類型。 擴展方法是一種靜態方法,但可以像擴展類型上的實例方法一樣進行調用。 對於用 C#、F# 和 Visual Basic 編寫的客戶端代碼,調用擴展方法與調用在類型中定義的方法沒有明顯區別 ...
  • 以前在隨筆《Winform開發框架之客戶關係管理系統(CRM)的開發總結系列1-界面功能展示 》的幾篇隨筆中介紹過基於WInform開發框架開發的CRM系統,系統的功能主要也是圍繞著客戶相關信息來進行管理的。本篇隨筆介紹在最新的《SqlSugar開發框架》中整合CRM系統模塊的功能。 ...
  • 隨著技術的發展,ASP.NET Core MVC也推出了好長時間,經過不斷的版本更新迭代,已經越來越完善,本系列文章主要講解ASP.NET Core MVC開發B/S系統過程中所涉及到的相關內容,適用於初學者,在校畢業生,或其他想從事ASP.NET Core MVC 系統開發的人員。 經過前幾篇文章... ...
  • [toc] 這篇文章是我之前總結的一篇文章,因為整理博客的原因,原有博客已經註銷,但這篇文章對一些讀者很有用,所以現在新瓶裝舊酒重新整理回來分享給大家。 最近一段時間生產環境頻繁出問題,每次都會生成一個hs_err_pid*.log文件,因為工作內容的原因,在此之前並沒有瞭解過相關內容,趁此機會學習 ...
  • # 前言 在上一篇文章中,給大家講解了泛型的概念、作用、使用場景,以及泛型集合、泛型介面和泛型類的用法,但受限於篇幅,並沒有把泛型的內容講解完畢。所以今天我們會繼續學習泛型方法、泛型擦除,以及通配符等的內容,希望大家繼續做好學習的準備哦。 *** 全文大約【**4600】** 字,不說廢話,只講可以 ...
  • 昨天遇到參數key大小寫不一致導致校驗簽名失敗的問題,查了很長時間才找到原因。看了一下FastJson源碼,發現JSON.toObject中轉換成對象的時候會忽略大小寫。 所以,當使用了JSON.toObject將json轉成Java對象後,再用JSON.toObject轉成json,key值就變了 ...
  • 基於java的線上商城設計與實現,線上購物平臺,校園購物商城,商品銷售平臺,基於Java的電商平臺;電商平臺,買家和賣家可以在此平臺上進行銷售和交易,節約了大量的線下時間成本,購物車的功能,校園交易平臺等等; ...