工廠裡的那些事

2021-07-10 11:19:45 字數 1967 閱讀 8962

在機房重構的時候工廠層裡面的東西都是些沒有見過的,所以查了一下資料,總結一下。

system.reflection 命名空間包含通過檢查託管**中程式集、模組、成員、引數和其他實體的元資料來檢索器相關資訊的型別。這些型別還可用於操作載入型別的例項,例如掛鉤事件或呼叫方法。若要動態建立型別,請使用system.reflection.emit 命名空間。

ctype函式作用於兩個引數。第一引數是將要轉換的表示式,第二個引數是目標型別或物件類。注意,第乙個引數必須是表示式,不能是型別。

ctype函式是乙個內聯函式,這意味著轉換是由已編譯的**執行的,通常不會生成函式呼叫,這將提高效能。

語法:ctype(expression,typename)

說明:expression

任何有效的表示式。如果expression的值超出typename允許的範圍,將引發異常。

typename

任何在dim語句的as子句內合法的表示式,即任何資料型別、物件、結構、類或介面的名稱。

ctype採用內聯方式編譯,即轉換**是計算表示式的**的一部分。在某些情況下不呼叫過程完成轉換,使執行更快。

如果轉換不會從expression定義到typename,visual basic顯示生成時錯誤訊息。

public function createuserinfo() as iuserinfodal

'ctype是乙個內聯函式,將前部分的表示式轉換為後面的型別

return ctype(assembly.load("logindal").createinstance("logindal" & "." & "loginuserdal"), iuserinfodal)

end function

在.net framework中反射

system.reflection 命名空間中的類與 system.type 使你能夠獲取有關載入的程式集和其中定義的型別的資訊,如類、介面和值型別。可以使用反射在執行時建立、呼叫和訪問型別例項。有關反射的特定方面的主題,請參見本概述末的相關主題。

公共語言執行時程式管理應用程式域,應用程式域構成具有相同應用程式範圍的物件周圍定義的邊界。此管理包括將每個程式集載入到相應的應用程式域中和控制每個程式集內的型別層次結構的記憶體布局。

程式集包含模組、模組包含型別,而型別包含成員。反射提供封裝程式集、模組和型別的物件。可以使用反射動態地建立型別的例項,將型別繫結到現有物件,或從現有物件中獲取型別。然後,可以呼叫型別的方法或訪問其字段和屬性

機房中的發射

在機房重構中我們用到了assembly,所以這裡主要說一下assembly。

使用assembly定義和引導程式集,載入在程式集清單中列出的模組,以及從此程式集中查詢型別並建立該型別的例項。

public function createuserinfo() as iuserinfodal

'ctype是乙個內聯函式,將前部分的表示式轉換為後面的型別

return ctype(assembly.load("logindal").createinstance("logindal" & "." & "loginuserdal"), iuserinfodal)

end function

assembly.load(assemblyname)這個方法是動態引導程式集,.createinstance(classname)方法則是建立類的例項

1、反射提高了程式的靈活性和擴充套件性

2、降低耦合性,提高自適應能力

3、它允許程式建立和控制任何類的物件,無需提前硬編碼目標類

1、效能問題:使用發射基本上是一種解釋操作,用於欄位和方法接入時要遠慢於直接**。因此發射機制主要應用在對靈活性和拓展性要求很高的系統框架上,普通程式不建議使用。

2、使用反射會模糊程式內部邏輯;程式設計師希望在源**中看到程式的邏輯,發射卻繞過了源**的技術,因而會帶來維護的問題,發射**比相應的直接**更複雜。

remap的那些事

月14日 今天還在看啟動 看到target.c這裡。先說說target.c的職責。target.c檔案包含和目標初始化相關的 如remap設定 系統時鐘設定和儲存器加速模組設定等,以及irq和fiq的異常處理空函式。好吧,這裡 看到了remap就好好查資料把它搞清楚咯!其實我前面看過這個了,只是人上...

AfxWinMain的那些事

afxwinmain函式原形如下 去掉了原來的很多沒用的注釋和累贅 cpp view plain copy print?int afxapi afxwinmain afxwininit函式 建立當前應用程式主線程 initinstance函式 內部通過create 函式來完成視窗的註冊,建立更新和顯...

void 的那些事

參考 void 是一種特殊的指標型別,可用於存放任意物件的位址。舉個例子 int p 0,pi p void pv p pv pd 但是一旦某個位址放到了void pv中,就不能利用 pv進行操作了 void 中存放的是未知物件的位址,所以無法操作該指標所指向的內容,但是可以對該指標進行操作,比如賦...