原创 C#中的多態特性
C#中的多態特徵與C++類似也存在相同的隱藏與運行時多態,但在C#中,隱藏特徵需要通過關鍵字顯示指明。在C#中,多態關鍵字有三個: virtual: 如基類方法增加該關鍵字,則表明子類可重寫此方法,重寫分爲兩種:隱藏和多態。 new: 隱
原创 模板約束
與C++模板不同,C#模板增加了對於泛化類的約束問題,泛化類約束共計4中類型: 基類約束:要求泛化類必須繼承至某個基類。 接口約束:要求泛化類必須實現某個接口。 構造函數約束:要求泛化類必須提供默認的構造函數。 值/引用數據類型約束:要求
原创 Android 觸屏畫圖
Android系統中觸屏畫圖中主要需要解決以下問題: 1. 畫圖的視圖,在哪上面畫? 2. 怎麼畫? 3. 畫的位置? Android官方文檔描述畫圖需要自定義視圖(Custom View),通過重載OnDr
原创 COM學習筆記三--聚合
在開發過程中,當一個COM B需要調用另一個COM A時,這時有兩種方法來實現該操作:包含,聚合。前一種直接保存A的對象指針,所有的操作均在B中進行封裝,涉及到A操作方法,利用A對象指針完成調用;而聚合在初始化期間保存對象A的指針,在運行
原创 C++ 中[]操作符重載
在實際程序中遇到一操作符問題,記錄下來方便以後查詢。在寫HashTable數據結構中,遇到操作符[]重載問題,具體需求如下: 1. a[x] = b; //如果a[x]爲空,則添加記錄 2. b = a[x]; //如
原创 CC2530 事件輪詢流程
CC2530芯片中的操作系統抽象層(OSAL)是一個多任務操作系統,在開發時首先需要將任務靜態添加至系統進行編譯,當任務執行後會產生對應的事件,當系統初始化時,需要初始化新添加的任務: void osalInitTasks( void )
原创 C#判斷對象相等
C#語言中,由於內存爲系統自動管理,且重載Equals方法形參爲Object基類,加上C#建議實現GetHashCode方法來加快判斷,這樣在判斷相等方面就多了幾步: 1. 判斷兩個對象是否對象相等; 2. 判斷兩
原创 Sqlalchemy 亂碼解決方法
這幾天遇到一個問題:通過Sqlalchemy將數據存入mysql時出現了亂碼,結合網上的解決方案,彙總如下: 1. 設置引擎編碼方式爲utf8。 engine = create_engine("mysql+pymysql://root:1
原创 C#與IronScheme交互
IronScheme爲C#版本的Scheme編譯器,通過它可以實現scheme與C#之間的相互調用,scheme編寫爲庫,C#直接調用scheme庫函數,這樣就可以動態加載scheme代碼,完成調用。Scheme也可以調用C#中的庫函數或
原创 基於VC++的Solidworks 插件開發
Solidworks插件開發中,通過VC++自動生成所有的模板文件後,主要添加一些邏輯代碼及菜單,就可以進行直接的開發: 1. 添加符號表,處理函數 2. 添加工具欄代碼: title.LoadString(IDS_SWAT
原创 CC2530中斷處理方法
在CC2530手冊中2.5小節總結了中斷處理的一般步驟,其中涉及的名稱如下: 1. 清除中斷標誌位 2. 全局中斷標誌EA,用於開啓所有中斷 3. 設置特殊功能寄存器(SFR)中中斷標誌位 4. 設置IEN0、IEN1、
原创 協變(Covariance)與逆變(Contravariance)
協變與逆變是類型系統中一個常見的問題,基類與子類之間類型變換時的定義要求。 協變:模板參數實例化中的子類賦值給基類,保留類型的順序,從具體類型到抽象類型。 IEnumerable<Base> base =IEnumerable<Deriv
原创 Linq 延遲執行
使用Linq時,其中一個重要概念就是延遲執行,所有的謂詞求值需要等到觸發時纔會被調用。在聲明時,它們是不執行的,除非調用Lambda表達式,造成其中的代碼開始執行,否則不會被執行。如果Lambda表達式執行的代價比較高(如調用數據庫,密集
原创 線程消息通信
線程間的消息通信主要採用PostThreadMessage函數來實現,主線程通過該函數來實現消息的發送,副線程則採用消息循環機制來驅動程序,當副線程無GUI時,就不能調用TranslateMessage,Dispat
原创 添加Linq支持
C#中添加Linq支持,只需添加一個迭代器就完成支持。迭代器模式是面嚮對象語言一個常見設計模式,C#中無需像C++那樣維護一個內部狀態,通過關鍵字yield模式來實現,編譯器通過自動生成一個內部類來維護迭代器中的狀態。測試程序如下: pu