【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
  • 下麵是一個標準的IDistributedCache用例: public class SomeService(IDistributedCache cache) { public async Task<SomeInformation> GetSomeInformationAsync (string na ...
  • 這個庫提供了在啟動期間實例化已註冊的單例,而不是在首次使用它時實例化。 單例通常在首次使用時創建,這可能會導致響應傳入請求的延遲高於平時。在註冊時創建實例有助於防止第一次Request請求的SLA 以往我們要在註冊的時候實例單例可能會這樣寫: //註冊: services.AddSingleton< ...
  • 最近公司的很多項目都要改單點登錄了,不過大部分都還沒敲定,目前立刻要做的就只有一個比較老的項目 先改一個試試手,主要目標就是最短最快實現功能 首先因為要保留原登錄方式,所以頁面上的改動就是在原來登錄頁面下加一個SSO登錄入口 用超鏈接寫的入口,頁面改造後如下圖: 其中超鏈接的 href="Staff ...
  • Like運算符很好用,特別是它所提供的其中*、?這兩種通配符,在Windows文件系統和各類項目中運用非常廣泛。 但Like運算符僅在VB中支持,在C#中,如何實現呢? 以下是關於LikeString的四種實現方式,其中第四種為Regex正則表達式實現,且在.NET Standard 2.0及以上平... ...
  • 一:背景 1. 講故事 前些天有位朋友找到我,說他們的程式記憶體會偶發性暴漲,自己分析了下是非托管記憶體問題,讓我幫忙看下怎麼回事?哈哈,看到這個dump我還是非常有興趣的,居然還有這種游戲幣自助機類型的程式,下次去大玩家看看他們出幣的機器後端是不是C#寫的?由於dump是linux上的程式,剛好win ...
  • 前言 大家好,我是老馬。很高興遇到你。 我們為 java 開發者實現了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何處理的,可以參考我的另一個項目: 手寫從零實現簡易版 tomcat minicat 手寫 ngin ...
  • 上一次的介紹,主要圍繞如何統一去捕獲異常,以及為每一種異常添加自己的Mapper實現,並且我們知道,當在ExceptionMapper中返回非200的Response,不支持application/json的響應類型,而是寫死的text/plain類型。 Filter為二方包異常手動捕獲 參考:ht ...
  • 大家好,我是R哥。 今天分享一個爽飛了的面試輔導 case: 這個杭州兄弟空窗期 1 個月+,面試了 6 家公司 0 Offer,不知道問題出在哪,難道是杭州的 IT 崩盤了麽? 報名面試輔導後,經過一個多月的輔導打磨,現在成功入職某上市公司,漲薪 30%+,955 工作制,不咋加班,還不捲。 其他 ...
  • 引入依賴 <!--Freemarker wls--> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.30</version> </dependency> ...
  • 你應如何運行程式 互動式命令模式 開始一個互動式會話 一般是在操作系統命令行下輸入python,且不帶任何參數 系統路徑 如果沒有設置系統的PATH環境變數來包括Python的安裝路徑,可能需要機器上Python可執行文件的完整路徑來代替python 運行的位置:代碼位置 不要輸入的內容:提示符和註 ...