C#復習⑦
2016年6月22日
11:50
Main Exception & Namespaces & Assemblies 異常 & 命名空間 & 程序集
1.try 語句
舉例說明
FileStream s = null; try { s = new FileStream(curName, FileMode.Open); ... } catch (FileNotFoundException e) { Console.WriteLine("file {0} not found", e.FileName); } catch (IOException) { Console.WriteLine("some IO exception occurred"); } catch { Console.WriteLine("some unknown error occurred"); } finally { if (s != null) s.Close(); }
注意:
catch語句的執行是順序執行的;
finally語句總會被執行;
在捕獲子句中可以省略異常參數名稱;
異常類都繼承自System.Exception;
2.System.Exception
屬性:
e.Message the error message as a string;
set by new Exception(msg);
e.StackTrace trace of the method call stack as a string
e.Source the assembly that threw the exception
e.TargetSite the method that threw the exception
方法:
e.ToString() returns the name of the exception and the StackTrace
3.Throwing an Exception拋出異常
通過非法操作:
除以0操作;
下表越界;
調用空引用;
通過throw語句:
throw new MyException(10); class MyException : ApplicationException { public int errorCode; public MyException(int x) { errorCode = x; } }
4.異常類
5.catch語句的搜索路徑
6.C#異常與Java異常的對比
7.委托中的異常以及多播委托中的異常
委托中的異常處理:
8.C# Namespaces VS Java Packages
9.Assemblies
Assembly: 版本控制的最小單元;動態加載的最小單元;
包括manifest、codes + Metadata
9.Namespaces VS Assemblies
Namespaces: 編譯時構造;控制可見性;
Assemblies: 運行時構造;控制動態加載以及版本控制;可能包含來自不同Namespaces下的類型;
10.Compiler Options 編譯時指令選擇
11.Versioning of Assemblies 版本控制
版本號存儲在Assembly中,每次Assembly加載都會進行版本號的檢查
12.Private and Public Assemblies
Private Assembly:
只能被一個應用程序使用;
is used by only one application
保存在應用程序目錄中;
resides in the application directory
沒有強命名;
does not have a "strong name"
無法簽名;
cannot be signed
Public Assembly (or shared assembly):
可以被所有應用程序使用;
can be used by all applications
保存在全局Assembly中
resides in the Global Assembly Cache (GAC)
必須有一個強命名;
must have a "strong name"
可以簽名;
can be signed
GAC保存著各種相同名字的Assemblies但是有著不同的版本號;
GAC can hold assemblies with the same name but with different version numbers
13.Strong Names & Signing Assemblies &Checking the Signature
強命名包括四個部分:
Assembly的命名
Assembly的版本號;
Assembly的文化屬性;
Assembly的公鑰。
(1) Generate a key file with sn.exe (Strong Name Tool)
(2) Sign the assembly with the AssemblyKeyFile attribute
即使是在相同的namespace下如果被internal修飾的類命名在不同的Assembly下也是不可以使用的。