System.Diagnostics中的StackFrame和StackTrace訪問棧框架和棧跟蹤。
方法類型:實例方法和靜態方法。
ref 按援用傳遞,方法聲明和調用同時使用ref關鍵字。
輸出參數,與ref相似 out也是按援用傳遞
params 關鍵字 參數數組必須是方法聲明中的最后1個參數,大量的字符串操作應使用
System.Text.StringBuilder
Try ... Catch ... Finally
屬性和運算符
JIT編譯器可使屬性的訪問比字段的訪問更快
屬性是快速訪問對象狀態的1種技術。
靜態屬性
索引器
容器類,父子關系中的父,1對多關系
使用ArrayList代替數組增強功能
“運算符” 特殊的方法
構造函數和對象生命周期
燒毀對象
把對象援用設置為null,并注意不再有對對象的其他援用,就能夠顯示燒毀對象。
利用程序中的大量析構函數會對性能有負面的影響,處理對象燒毀,首選方式利用
IDisposable接口,實現Dispose方法,以Finalize析構函數方法來履行,但不會中斷垃圾回收
進程。
私有構造函數
靜態構造函數
IClonable Clone 深拷貝 MemberWiseColone 淺拷貝
串行化和并行化
將對象串行化保存下來,這類技術廣泛利用于恢復利用程序的狀態,定期獲得屏幕快照,保存對象等。
.NET Framework提供了豐富的XML串行化模型
xsd.exe 推斷XML模式,XML架構/數據類型支持實用工具
事件和拜托
基于事件的編程是.NET Framework的基石
.NET Framework中的事件機制使用了拜托(回調)
事件作為1種經常使用的方法來消除事件源對象(生成事件的對象)與事件接收器對象(接受事件通知的對象)之間的耦合。
拜托 類似于利用程序中指向對象中方法的指針
3個步驟:
1 聲明拜托類型
2 創建拜托對象,并將該對象綁定指定方法上
3 使用拜托對象來調用方法
.NET Framework支持兩種類型的拜托
單播拜托:允許1個對象上調用1個方法
多播拜托:允許在不同對象上調用1系列方法,保護1個調用對象
使用多播拜托的步驟:
1 定義1個拜托類型
2 編寫具有相同簽名方法作為拜托
3 創建拜托對象,將它綁定到需要通過拜托調用的第1個方法
4 創建另外一個拜托對象,綁定到下1個需要調用的方法
5 System.Delegate類的Combine方法,合并成1個集成的多播拜托
異步拜托 可以在后臺線程中調用的方法
調用拜托實例3種方式:
1 同步調用,等待方法履行終了,最多見
2 異步調用,等待方法履行終了, EndInvoke(),但在方法履行終了之前調用
3 異步調用,注冊1個回調方法,1旦履行終了,給出通知
事件的實現 使用拜托存儲定閱的事件處理方法,典型的Observer設計模式的1種實現
每一個事件,必須指定下面兩項內容:事件名,事件的簽名(參數列表)
System.EventHandler 1個內置的拜托
事件不能有返回類型,只能從事件源對象到事件接收方對象的單向信息流
靜態事件 較少見,相對1般事件
定義自己注冊的方法
大多數情況下不需要定義定制的注冊方法,但這類技術可使代碼最簡潔和快速。
Framework中,大多數控件都使用定制的注冊方法。
基類和子類不能援用同1個拜托
繼承和多態性 所有的面向對象語言都支持,多態性由繼承支持,把1種類型的對象視作另外一種類型的實例的多態性
基類定義為virtual,派生類就能夠重寫基類的操作
標記為非虛的方法不能重寫
操作聲明為virtual,可以重寫該實現
操作聲明為abstract,必須重寫該實現
類 繼承自System.Object
結構 繼承自System.ValueType,繼承自System.Object轉換成它實現的接口類型,對援用類型代替類型要謹慎,不能調用接口不支持的任何對象。
代碼組織和元數據
同享程序集 全局程序集緩存 Global Assembly Cache (GAC)
程序集 可重用的最小單元
元數據 為公共語言運行時提供了在運行期間加載類型和調用方法所需的所有信息
metadata 是元編程的基礎,在很多系統中也是根本的東西,了解這個東西可以比較深入的了解某個架構
查看元數據最簡單方法使用ildasm.exe /adv或/advancel選項
.NET模塊是1個可移植、可履行(PE)格式文件
只有數據的模塊 SDK包括1個工具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部署。
私有程序集部署利用程序也不復雜,將需要的程序集合放在同1個文件夾或用利用程序配置文件通知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,因此如果1個表單即便沒有載入,如果調用Show方法也會直接將表單載入。
3. 當你需要在表單顯示或隱藏時運行某些代碼,放在Activated和Deactivate比GotFocus和LostFocus事件中好。
4. 收到close的要求,表單先運行Closing事件中代碼,再Closed代碼,因此數據有效校驗放在Closing中為好。
5. Hide方法,即便沒有表單沒有Load到內存中,當調用Hide時候也會將表單Load到內存中,但不顯示。