C# 跨平臺(tái)基礎(chǔ)知識(shí)以及必知的關(guān)鍵術(shù)語(yǔ)
跨平臺(tái)程序就是可運(yùn)行在多個(gè)操作系統(tǒng)上的程序,這里的操作系統(tǒng)可以是Microsoft Windows、Android、macOS和Linux等。創(chuàng)建跨平臺(tái)程序的目標(biāo)是,只編寫程序一次,然后在支持的操作系統(tǒng)上編譯,部署該程序后,代碼在每個(gè)目標(biāo)操作系統(tǒng)上以相同的方式執(zhí)行,并表現(xiàn)出一致的行為。在過(guò)去,即使使用了開(kāi)源庫(kù)(如Mono或Java)也很難實(shí)現(xiàn)這個(gè)目標(biāo),而且如前所述,如果使用完整的.NETFrameworic,并不能真正地創(chuàng)建跨平臺(tái)的程序。面臨的許多復(fù)雜問(wèn)題源于跨平臺(tái)代碼在使用操作系統(tǒng)服務(wù)(如磁盤I/O、安全協(xié)議和網(wǎng)絡(luò)訪問(wèn))時(shí),對(duì)不同操作系統(tǒng)的服務(wù)之間存在的細(xì)微差別進(jìn)行處理的方式。
隨著程序員開(kāi)始將更多注意力放在編寫能夠輕松跨平臺(tái)運(yùn)行的C#代碼上,考慮這些為數(shù)眾多的“必知”概念和術(shù)語(yǔ),有助于打下堅(jiān)實(shí)基礎(chǔ)。下表列舉并描述了這些關(guān)鍵術(shù)語(yǔ)。
關(guān)鍵術(shù)語(yǔ) | 描述 |
硬件平臺(tái) | x86、64位、Itanium、ARM 等 |
軟件平臺(tái) | 操作系統(tǒng):Windows、Linux、Android、macOS、iOS 等 |
跨平臺(tái) | 編寫代碼一次,當(dāng)針對(duì)目標(biāo)平臺(tái)編譯代碼后,就能在任何支持的硬件和軟件平臺(tái)上運(yùn)行代碼 |
生態(tài)系統(tǒng) | 社區(qū)資源、開(kāi)發(fā)工具和運(yùn)行時(shí)軟件的總稱 |
堆找(stack) | 在一起使用的硬件、軟件和生態(tài)系統(tǒng),用來(lái)構(gòu)建和運(yùn)行程序,如Windows堆棧、Linux堆找等 |
API | 應(yīng)用程序編程接口(Application Programming Interface, API)公開(kāi)了類、委托、枚舉、接口和結(jié)構(gòu),供其他 程序使用 |
程序集 | —個(gè).dll文件,公開(kāi)了 API,供其他程序集或可執(zhí)行文件使用 |
標(biāo)準(zhǔn) | API的正式規(guī)范或協(xié)定 |
關(guān)鍵術(shù)語(yǔ) | 描述 |
垂直模型(Verticals) | Windows Forms、ASP.NET、WPF、UWP等:常稱為應(yīng)用程序模型 |
框架/庫(kù) | API的豐富集合,用于創(chuàng)建專注于特定垂直模型的程序,以程序集的形式出現(xiàn) |
開(kāi)源 | 由軟件開(kāi)發(fā)人員的開(kāi)放社區(qū)編寫和支持的框架和代碼庫(kù)。可根據(jù)特定開(kāi)源庫(kù)的許可使用對(duì)應(yīng)的庫(kù) |
GitHub | 一個(gè)在線的開(kāi)源代碼存儲(chǔ)庫(kù),用于分享和更新公共可用的和社區(qū)支持的代碼,以及創(chuàng)建這種代碼的分支 |
分支(forking) | 也稱為branch,但暗含著開(kāi)發(fā)社區(qū)的一種分歧。分支就是用現(xiàn)有的源代碼存儲(chǔ)庫(kù)的副本,進(jìn)行新的獨(dú)立 開(kāi)發(fā)。例如,.NET Core就是.NET Framework的一個(gè)分支 |
版本 | 框架的每個(gè)版本包含新的或改進(jìn)的API,還可能包含對(duì)bug的修復(fù) |
語(yǔ)義版本 | 此概念采用以下格式來(lái)描述修改的規(guī)模和類型:[MAJOR].[MINOR].[PATCH]8如果MAJOR數(shù)字發(fā)生變 化,則該版本的影響比MINOR發(fā)生變化時(shí)更大 |
目標(biāo)框架 | 程序依賴的 API 集合,如 dotnet-sdk-2.0.4-winl0-x64 |
TFM | 目標(biāo)框架名對(duì)象(Target Framework Moniker? TFM)是目標(biāo)框架的精簡(jiǎn)版本,如netstandard2.0或 netcoreapp2.0。TFM常用于讓程序面向特定的框架版本 |
依賴 | 編譯程序或完成某個(gè)任務(wù)必須用到的一組特定程序集 |
元數(shù)據(jù) | 提供了關(guān)于其他數(shù)據(jù)的信息的數(shù)據(jù),如創(chuàng)建日期、創(chuàng)建者和文件大小 |
包 | —組程序集和元數(shù)據(jù) |
元包 | —組相互依賴的包,但沒(méi)有自己的庫(kù)或程序集 |
NuGet | —個(gè)用于.NET的包管理器,可幫助開(kāi)發(fā)人員創(chuàng)建和使用包 |
BCL | 基類庫(kù)(Base Class Library, BCL)是常用類、接口和值類型的一個(gè)集合。例如,System.*指令中的類、接口、方法和值類型 |
PCL | 可移植類庫(kù)(Portable Class Library, PCL)是一個(gè)類庫(kù),不必重新編譯就可以運(yùn)行在多個(gè).NET垂直模型中 |
運(yùn)行庫(kù) | 公共語(yǔ)言運(yùn)行庫(kù)(Common Language Runtime,CLR)。CLR管理內(nèi)存分配(垃圾回收)、編譯和執(zhí)行 |
CoreCLR | 與CLR相同,但可跨平臺(tái)運(yùn)行。這是.NET Core的公共語(yǔ)言運(yùn)行庫(kù)引擎 |
CoreFX | .NET Core System.*名稱空間,嚴(yán)重依賴于運(yùn)行庫(kù) |
CoreRT | 類似于CoreCLR運(yùn)行庫(kù),但沒(méi)有JIT編譯器。程序?qū)㈩A(yù)先編譯(參見(jiàn).NET Native),在這個(gè)過(guò)程中,將移除所有多余的代碼和元數(shù)據(jù) |
.NET Native | 創(chuàng)建的本機(jī)代碼將被預(yù)先編譯,常用于UWP開(kāi)發(fā) |
點(diǎn)擊加載更多評(píng)論>>