《C#類設計手冊》基礎知識要點

來源:互聯網
上載者:User

標籤:

應該說是對瞭解一些基本概念十分好的書,雖然編寫了這麼長時間的C#程式,但翻了兩天,也感覺有些東西可以吸取的。(權當這裡作為讀書筆記的摘要 ^_^)

幾個縮寫術語:
CTS  Common Type System 一般型別系統
CLS  Common Language Specification Common Language Specification
CLR Common Language Runtime 通用語言執行平台
MSIL Microsoft 中繼語言
GAC Global Assembly Cache 全域組件快取

Stack 棧 值類型使用
託管堆 類似C的堆,但不考慮釋放,因此叫“託管”,Managed
               空間比棧大得多,但訪問速度慢

.NET環境下,任何類型無論是值還是參考型別,都是對象 System.Object
.NET有3種值類型:基本類型,使用者定義的值類型,struct和枚舉類型

C#將string和object也列為基本類型,儘管它們都是參考型別
枚舉(位標記)  System.Enum 實現了IFormattable
參考型別:類類型,委託(指向方法的類型,安全指標),數組,字串

在C#中沒有全域變數和全域函數

 委託的3個必須步驟:
1.  聲明委託;
2. 建立委派物件,把它綁定到特定方法上;
3. 使用委派物件,調用這個方法

《C#字串和Regex參考手冊》對字串處理說的比較深入,有時間值得一看。

裝箱和unboxing
裝箱的對象包含值對象中的資料副本,如果裝箱的對象修改了,不會影響原來的值對象。

常量,編譯時間確定的,在DLL中改變了需要重新編譯調用了該DLL的對應程式集。

靜態唯讀變數,運行期間確定其值
資料庫連接資訊等應放在設定檔中,面向部署
Equals()  .NET定義了兩種形式的等價:引用等價,值等價
預設情況下,System.Object.Equals() 測試引用等價,但可以Override使其測試值等價。

System.Diagnostics中的StackFrame和StackTrace訪問棧架構和棧跟蹤。

方法類型:執行個體方法和靜態方法。

ref 按引用傳遞,方法聲明和調用同時使用ref關鍵字。

輸出參數,與ref相似 out也是按引用傳遞

params 關鍵字 參數數組必須是方法聲明中的最後一個參數,大量的字串操作應使用
System.Text.StringBuilder

Try ... Catch ... Finally

屬性和運算子
JIT編譯器可以使屬性的訪問比欄位的訪問更快
屬性是快速存取對象狀態的一種技術。

靜態屬性

索引器
容器類,父子關係中的父,一對多關聯性
使用ArrayList代替數組增強功能

“運算子” 特殊的方法

建構函式和對象生命週期
銷毀對象
把對象引用設定為null,並注意不再有對對象的其他引用,就可以顯示銷毀對象。

應用程式中的大量解構函式會對效能有負面的影響,處理對象銷毀,首選方式利用
IDisposable介面,實現Dispose方法,以Finalize解構函式方法來執行,但不會中斷記憶體回收
過程。

私人建構函式
靜態建構函式

IClonable Clone 深拷貝   MemberWiseColone 淺拷貝

序列化和並行化
將對象序列化儲存下來,這種技術廣泛應用於恢複應用程式的狀態,定期擷取螢幕快照,儲存對象等。

.NET Framework提供了豐富的XML序列化模型
xsd.exe 推斷XML模式,XML架構/資料類型支援工具 + 生產力


事件和委託
基於事件的編程是.NET Framework的基石
.NET Framework中的事件機制使用了委託(回調)
事件作為一種常用的方法來解除事件來源對象(建置事件的對象)與事件接收器對象(接受事件通知的對象)之間的耦合。

委託 類似於應用程式中指向對象中方法的指標
3個步驟:
1 聲明委託類型
2 建立委派物件,並將該對象綁定指定方法上
3 使用委派物件來調用方法

.NET Framework支援兩種類型的委託
單播委託:允許一個對象上調用一個方法
多播委託:允許在不同對象上調用一系列方法,維護一個調用對象

使用多播委託的步驟:
1 定義一個委託類型
2 編寫具有相同簽名方法作為委託
3 建立委派物件,將它綁定到需要通過委託調用的第一個方法
4 建立另一個委派物件,綁定到下一個需要調用的方法
5 System.Delegate類的Combine方法,合并成一個整合的多播委託

非同步委託  可以在後台線程中調用的方法
調用委託執行個體三種方式:
1 同步調用,等待方法執行完畢,最常見
2 非同步呼叫,等待方法執行完畢, EndInvoke(),但在方法執行完畢之前調用
3 非同步呼叫,註冊一個回調方法,一旦執行完畢,給出通知

事件的實現  使用委託儲存訂閱的事件處理方法,典型的Observer設計模式的一種實現
每個事件,必須指定下面兩項內容:事件名,事件的簽名(參數列表)

System.EventHandler 一個內建的委託
事件不能有傳回型別,只能從事件來源對象到事件接收方對象的單向資訊流

靜態事件 較少見,相對於一般事件

定義自己註冊的方法
大多數情況下不需要定義定製的註冊方法,但這種技術可以使代碼最簡潔和快速。
Framework中,大多數控制項都使用定製的註冊方法。

基類和子類不能引用同一個委託
繼承和多態性  所有的物件導向語言都支援,多態性由繼承支援,把一種類型的對象視作另一種類型的執行個體的多態性

基類定義為virtual,衍生類別就可以重寫基類的操作
標記為非虛的方法不能重寫
操作聲明為virtual,可以重寫該實現
操作聲明為abstract,必須重寫該實現

類 繼承自System.Object
結構 繼承自System.ValueType,繼承自System.Object轉換成它實現的介面類型,對於參考型別代替類型要小心,不能調用介面不支援的任何對象。

程式碼群組織和中繼資料

共用組件 全域組件快取  Global Assembly Cache (GAC)

程式集 可重用的最小單元

中繼資料 為通用語言執行平台提供了在運行期間載入類型和調用方法所需的所有資訊
metadata 是元編程的基礎,在很多系統中也是根本的東西,瞭解這個東西可以比較深入的瞭解某個架構

查看中繼資料最簡單方法使用ildasm.exe /adv或/advancel選項

.NET模組是一個可移植、可執行(PE)格式檔案

只有資料的模組  SDK包含一個工具Assembly Linker(AL.exe)
利用該工具將這些非MISL模組連結到程式集中

將該檔案編譯成模組,必須使用C#.NET命令列編譯器
不能使用Visual Studio .NET 因為它總是建立單、程式集
例如:csc /target:module csMod.cs csMod.netmodule
*.netmodule 是.NET的模組
增加模組到資訊清單中:
csc /addmodule: csMod.netmodule /addmodule:VBMod.netmodule MainMod.cs

程式部署
部署單程式集應用程式比較簡單,直接用xcopy部署。
私用組件部署應用程式也不複雜,將需要的程式集合放在同一個檔案夾或者用應用程式設定檔通知CLR在什麼位置尋找程式集

部署共用組件
添加到GAC 全域組件快取
但Microsoft不推薦應用程式與GAC相互依賴,應盡量使用應用私用組件部署方式

利用公有-私人金鑰組可以為程式集建立強式名稱
編譯期間編譯器使用私密金鑰,將相應的公開金鑰寫入資訊清單
sn (Strong Name)  sn /k *.snk
MSDN中尋找"Keys crytography"尋找相應內容
publickey 較長的數字
public key token 公開金鑰令牌
sn /t *.snk

將共用組件安裝到GAC中
gacutil -i *.dll  需要管理員權限
或者在控制台的管理工具中找 .NET FrameWork Configuration


 

1. Windows Forms幾個平時沒有留意的常用的屬性:
    AcceptButton:設定在表單擊活狀態下,按ENTER鍵對應反應的是那個按鈕的函數。預設值 None
    CancelButton:設定在表單擊活狀態下,按ESC鍵對應反應的是那個按鈕的函數。預設值 None
  

2. Form在表單方法Show被調用時,事件和方法觸發的順序:
    Load -> GotFocus -> Activated -> Closing -> Closed -> Deactivate -> LostFocus -> Dispose
    Show方法隱含調用Load,因此如果一個表單即使沒有載入,如果調用Show方法也會直接將表單載入。

3. 當你需要在表單顯示或者隱藏時運行某些代碼,放在Activated和Deactivate比GotFocus和LostFocus事件中好。

4. 收到close的請求,表單先運行Closing事件中代碼,再Closed代碼,因此資料有效校正放在Closing中為好。

5. Hide方法,即使沒有表單沒有Load到記憶體中,當調用Hide時候也會將表單Load到記憶體中,但不顯示。

《C#類設計手冊》基礎知識要點

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.