【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
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...