C#基礎(chǔ)之002-基礎(chǔ)概念001

C#關(guān)鍵概念

C# 組織結(jié)構(gòu)的關(guān)鍵概念是程序 (program)、命名空間 (namespace)、類型 (type)、成員 (member) 和程序集 (assembly)。

C# 程序由一個或多個源文件組成。

類和接口就是類型的示例。

字段 (field)、方法、屬性和事件是成員的示例。

程序集擴展名.exe(應(yīng)用程序)或.dll(類庫)

CLR、CTS、CLS

CLR:公共語言運行時

CTS:通用類型庫

CLS:公共語言規(guī)范

CLR與IL分別是什么含義?

CLR:公共語言運行時,類似于Java中的JVM,Java虛擬機;在.Net環(huán)境下,各種編程語言使用一種共同的基礎(chǔ)資源環(huán)境。CLR就是具體的編程語言如:C#.NET與操作系統(tǒng)之間的翻譯,同時為具體的編程語言提供資源:

IL,中間語言,也稱MSIL,微軟中間語言,或CIL,通用中間語言;所有.NET源代碼(不管用哪種語言編寫)在進行編譯時都被編譯成IL。在應(yīng)用程序運行時被即時(Just-In-Time,JIT)編譯器處理成為機器碼,被解釋及執(zhí)行。

什么是托管代碼和非托管代碼?

托管代碼就是Visual Basic .NET和C#編譯器編譯的代碼。編譯器把代碼編譯成中間語言(IL),而不是能直接在你的電腦上運行的機器碼。比如用C# /http://VB.NET寫的任何代碼都是托管代碼

非托管代碼直接編譯成目標計算機的機械碼,只能運行在編譯出它們的計算機上,或者是其它相同處理器或者幾乎一樣處理器的計算機上。Visual C++可以創(chuàng)建非托管程序。比如COM組件, ActiveX組件和Win32接口函數(shù)都是非托管代碼。

托管代碼與非托管代碼的區(qū)別

1、托管代碼獨立于平臺和語言,能更好的實現(xiàn)不同語言平臺之間的兼容;

???? 非托管代碼依賴于平臺和語言。

2、托管代碼可享受CLR提供的服務(wù)(如安全檢測、垃圾回收等),不需要自己完成這些操作;

?????? 非托管代碼需要自己提供安全檢測、垃圾回收等操作。

托管代碼的執(zhí)行過程

1、選擇編譯器:選擇一個或多個針對運行庫的語言編譯器,如 Visual Basic、C#、Visual C++、JScript 或許多第三方編譯器(如 Eiffel、Perl 或 COBOL 編譯器)。

2、編譯,將源代碼翻譯為microsoft中間語言(MSIL)并生成需要的元數(shù)據(jù)。

3、執(zhí)行,實時 (JIT) 編譯器將 MSIL 翻譯為本機代碼。PS:編譯過程中,代碼通過驗證.

????? 確認 MSIL 和元數(shù)據(jù)是否可以將代碼確定為類型安全。

4、運行代碼:公共語言運行庫提供使執(zhí)行能夠發(fā)生以及可在執(zhí)行期間使用的各種服務(wù)的結(jié)構(gòu)。

什么是基元類型

由編譯器直接支持的數(shù)據(jù)類型稱為基元類型,例如:在C#中,int直接映射為System.Int32類型

類型:sbyte / byte / short / ushort /int / uint / long / ulong ? ? ? char / float / double / bool

類型

類型有兩種:值類型 (value type) 和引用類型 (reference type)

值類型存儲是數(shù)據(jù),存儲于棧,派生于 System.ValueType

引用類型的變量存儲對其數(shù)據(jù)的引用稱為對象。存儲于堆。

值類型、靜態(tài)變量被

GC回收嗎?

值類型是在棧上, 當某方法返回時, 棧會恢復(fù)到該方法調(diào)用前的狀態(tài), 該方法在棧上分配的值類型的內(nèi)存自然就釋放了, 不必等GC。PS:回收引用類型

靜態(tài)字段 分配在Loader heap 中,非 GC heap,不受GC控制。
應(yīng)用程序域卸載的時候回收靜態(tài)變量

值類型、引用類型是否可以派生?

值類型密封(seal)的,所以無法派生出新的值類型。

引用類型可以派生出新的類型。

值類型和引用類型的區(qū)別

繼承System.Value的類型都是值類型,其他類型都是引用類型。

引用類型可以派生出新的類型,而值類型不能;

引用類型存儲在堆中,而值類型既可存儲在堆中也可以存儲在棧中。

引用類型可以包含null值,值類型不能(可空類型功能允許將null賦給值類型);

引用類型變量的賦值只復(fù)制對對象的引用,而不復(fù)制對象本身。而將一個值類型變量賦給另一個值類型變量時,將復(fù)制包含的值。當比較兩個值類型時,進行的是內(nèi)容比較;而比較兩個引用類型時,進行的是引用比較。

值類型在內(nèi)存管理方面具有更好的效率,并且不支持多態(tài),適合用作存儲數(shù)據(jù)的載體;引用類型支持多態(tài),適合用于定義應(yīng)用程序的行為。

Int[]是引用類型還是值類型

數(shù)組類型繼承System.Array,而System.Array繼承自System.Object。所以所有的數(shù)組類型都是引用類型

引用類型各概念

類:包含數(shù)據(jù)成員(字段)和函數(shù)成員(方法、屬性等)的數(shù)據(jù)結(jié)構(gòu)

接口:像一個協(xié)定,作為一個公共函數(shù)成員的命名集

委托:對具有特定參數(shù)列表和返回類型的方法的引用,通過委托,將方法作為實體賦值給變量和作為參數(shù)傳遞

數(shù)組類型:通過在某個類型名后加一對方括號來構(gòu)造的,數(shù)組不用聲明就可以應(yīng)用。例如:int[];

用戶可以自定義類型?

類類型(class type)、結(jié)構(gòu)類型(struct type)、接口類型(interface type)、枚舉類型(enum

type)和委托類型(delegate type)。

哪些類型支持泛型?

類類型、結(jié)構(gòu)類型、接口類型、委托類型

變量

C# 中存在幾種變量(variable),包括字段、數(shù)組元素、局部變量和參數(shù),變量表示了存儲位置。

什么是裝箱和拆箱?

裝箱:從值類型轉(zhuǎn)換到引用類型。

拆箱:從引用類型轉(zhuǎn)換到值類型。

裝箱

裝箱轉(zhuǎn)換允許將 value-type 隱式轉(zhuǎn)換為 reference-type。下列裝箱轉(zhuǎn)換:

從任何 value-type 到 object 類型。

從任何 value-type 到 System.ValueType 類型。

從任何 non-nullable-value-type 到 value-type

實現(xiàn)的任何 interface-type。

從任何nullable-type到由nullable-type的基礎(chǔ)類型實現(xiàn)的任何interface-type。

從任何enum-type到 System.Enum 類型。

從任何具有基礎(chǔ) enum-type 的 nullable-type 到 System.Enum 類型。

裝箱轉(zhuǎn)換隱含著復(fù)制一份待裝箱的值

拆箱轉(zhuǎn)換

取消裝箱轉(zhuǎn)換允許將reference-type顯式轉(zhuǎn)換為value-type。存在以下拆箱轉(zhuǎn)換:

從 object 類型到任何 value-type。

從 System.ValueType 類型到任何 value-type。

從任何interface-type到實現(xiàn)了該 interface-type 的任何non-nullable-value-type

從任何interface-type到其基礎(chǔ)類型實現(xiàn)了該interface-type的任何nullable-type。

從 System.Enum 類型到任何 enum-type。

從 System.Enum 類型到任何具有基礎(chǔ) enum-type 的 nullable-type。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • { "Unterminated string literal.": "未終止的字符串文本。", "Identifi...
    栗子雨閱讀 8,076評論 0 3
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,696評論 18 399
  • { "Unterminated string literal.": "未終止的字符串文本。", "Identifi...
    一粒沙隨風飄搖閱讀 11,313評論 0 3
  • 文、攝影:境由心成 "首夏猶清和,芳草亦未歇"。深居繁華鬧市中有這樣一處院落,三層居室錯落有致,圍墻是帶木...
    境由心成閱讀 1,313評論 1 1

友情鏈接更多精彩內(nèi)容