2013-02-27
預設情況下,clr假定所有方法引數都是傳值的。當傳遞引用型別的物件時,也預設是傳值的,只不過這個值是引用(指標)本身。
clr允許以傳引用的方式傳遞引數。在c#中,用關鍵字out或ref來告訴編譯器。編譯器將傳遞引數的位址,而不是傳遞引數本身。
從clr角度看,out和ref完全一致。但從c#編譯器看,有區別:
(1) out,表明不指望呼叫者在呼叫方法之前初始化物件
(2) ref,表明必須在呼叫著在呼叫方法之前初始化物件
用關鍵字params表明傳遞的是可變數量的引數
int add(paramsint values)
注意:只有最後乙個引數可以用params引數
為了使方法有最大的靈活性,最大的應用範圍:
(1) 宣告方法引數型別是,盡量指定最弱的型別,最好是介面而不是基類。
(2) 相反,一般最好將方法的返回型別宣告為最強的型別(以免受限於特定的型別)。
《CLR via C 》讀書筆記 09 引數
如果提取的乙個方法,目的是 傳入乙個值,然後加工計算後返回 這是乙個常見的行為 傳入的值如果是 值型別 那是建立的副本,因為所以需要返回的時候再次賦值 使用 out 修飾形參,這樣傳入的是該值的位址,避免建立副本,返回 開發中,會遇到給乙個方法傳的引數大於7個,雖然這樣寫的次數少,但我幹過 引數多,...
《CLR via C 》讀書筆記 之 方法
2013 02 27 8.1 例項構造器和類 引用型別 8.2 例項構造器和結構 值型別 8.3 型別構造器 8.6 擴充套件方法返回 建立引用型別的例項的過程 1 為例項的資料字段分配記憶體 例項字段包括本身及其基類的例項字段 2 然後初始化物件的附加字段 型別物件指標和同步塊索引 3 呼叫型別的...
CLR via C 讀書筆記1 9
與非託管 的互操作 clr 提供3種與非託管 的互動方案 託管 通過使用 p invoke 機制 來呼叫dll檔案中的非託管函式 許多 fcl 中定義的型別內部都有呼叫到 kernel32.dll,user32.dll 等等檔案中的函式。同時許多程式語言會提供託管 呼叫非託管 的簡便途徑,比如 c ...