.Net Framework 1
- .NET Framework 是適用於 Windows 的 受控執行環境,可為執行中的應用程式提供多樣的服務。
- .NET 框架上主要運行在 Windows 操作系統,Linux 和 Mac OS 可透過 Mono(.NET框架,其中包括一個C#編譯器和運行多個操作係統)來開發。
- 可用於下列語言:C#,C++,Visual Basic,Jscript,COBOL 等訪問框架以及與彼此通信。
- 可編寫的應用程序有:
- Windows 應用程序
- Web 應用程序
- Web 服務
提供給執行中應用程式的服務
- 記憶體管理:在許多程式設計語言中,程式設計人員負責配置和釋放記憶體,以及處理物件存留期。 在 .NET Framework 中,CLR 會代表應用程式提供這些服務。
- 一般型別系統:在傳統的程式語言中,基本型別是由編譯器所定義,這會讓跨語言互通性變得很複雜。 在 .NET Framework 中,基底型別是由 .NET Framework 型別系統所定義,可在所有以 .NET Framework 為目標的語言之間通用。
- 廣泛類別庫:程式設計人員不再需要撰寫大量的程式碼來處理常見的低階程式設計作業,而能夠使用 .NET Framework 類別庫中可立即存取的類型程式庫及其成員來完成這項工作。
- 開發架構和技術: .NET Framework 包含特定應用程式開發領域所需的程式庫,例如 Web 應用程式所需的 ASP.NET、資料存取所需的 ADO.NET、服務導向應用程式所需的 Windows Communication Foundation,以及 Windows 傳統型應用程式所需的 Windows Presentation Foundation。
- 語言互通性:以 .NET Framework 為目標的語言編譯器會發出名為通用中間語言 (CIL) 的中繼程式碼,這個程式碼接著會在執行階段由通用語言執行平台進行編譯。 有了此功能,使用某一種語言撰寫的常式就能供其他語言存取,而程式設計人員也能使用自己慣用的語言專心建立應用程式。
- 版本相容性:在極少數例外狀況下,使用某一特定 .NET Framework 版本開發的應用程式可不經修改直接在較新的版本上執行。 並存執行: .NET Framework 允許同一部電腦上存在多個版本的 Common Language Runtime,藉此協助解決版本衝突。 這表示,多個應用程式版本不僅可共存,應用程式也可以建置時使用的 .NET Framework 版本上執行。 並存執行適用於.NET Framework 版本群組 1.0/1.1、2.0/3.0/3.5 和 4/4.5.x/4.6.x/4.7.x。
ASP.NET
- 隨附於 .NET Framework 的原始 ASP.NET 實作。
- ASP.NET 用於 Windows 系統,若要跨平台可參考 ASP.NET Core
程式碼的編譯
Managed Code > C# > IL > CLR > 0001101 > 執行程式
- Managed Code
- Unmanaged Code 作業系統 (OS) 載入記憶體並啟動的二進位檔,關乎到記憶體管理的安全性。
- Managed 程式碼就是其執行受到執行階段管理的程式碼。
- 自動記憶體管理、安全性界限、型別安全。
- IL 中繼語言
- .NET 語言 (例如 C#) 可向下編譯成硬體無從驗證的指令集。
- 是一套運作環境規範,包括一般系統、基礎類庫和與機器無關的中間程式碼,全稱為Common Language Infrastructure。
- CLR (Common Language Runtime)
- 指 .NET Framework 的執行階段,CLR 會處理記憶體配置和管理。
- CLR 也是虛擬機器,它會執行應用程式,也會編譯程式碼,將 Managed 程式碼編譯成機器碼。
- 含程式執行、型別檢查、記憶體管理、執行緒管理、程式碼安全驗證、遠端處理、編譯(Compilation)…等。
- (目前的 Microsoft CLR 實作僅限 Windows,若要跨平台可使用 ASP.NET Core 其中包含 CoreCLR)
- Machine Code (也叫原生碼 Native Code)
- 和作業系統或硬體有相關的程式,若將程式移到不同平台可能會無法執行。
GC 自動記憶體管理 1
- .NET 使用記憶體回收 (GC) 為程式提供自動記憶體管理。
- .NET 的記憶體回收行程可管理應用程式的記憶體配置及釋放。
- 記憶體分配與回收流程:
- 當建立新的物件時,CLR 執行平台會從 Managed 堆積配置物件的記憶體。
- 只要 Managed 堆積中有可供使用的位址空間,平台就會繼續為新的物件配置空間。
- 當記憶體回收行程執行回收時,會檢查 Managed 堆積中是否有應用程式不再使用的物件,並執行必要的作業以回收其記憶體。
引用和命名空間
using System; //using
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace w2 //namespace
{
class Program //class
{
static void Main(string[] args) //method
{
}
}
}
- using:呼叫函式庫部分。
- namespace:用來指明程式所屬範圍的機制,為類別建立層級組織,同時避免相同名稱類別產生衝突,可控制類別的範圍。
- class:負責在 namespace 命名空間裡的類別,好進行管理 method。
- method:是在 class 下,負責各個細節功能的運作。
NuGet 套件 1
- NuGet 是一個用來安裝第三方套件的套件,舉例:
- System.Runtime :最基本的 .NET Core 套件,包括 Object、String、Array、Action 及 IList
。 - System.Collections :泛型集合的組合,包括 List
和 Dictionary<TKey,TValue> 。 - System.Net.Http:HTTP 網路通訊類型的組合,包括 HttpClient 和 HttpResponseMessage。
- System.IO.FileSystem:用來讀取和寫入本機或網路磁碟型儲存裝置的類型組合,包括 File 和 Directory 。
- System.Linq:用來查詢物件的類型組合,包括 Enumerable 和 ILookup<TKey,TElement>。
- System.Runtime :最基本的 .NET Core 套件,包括 Object、String、Array、Action 及 IList