B S備忘錄21 使用反射將委託掛鉤

2021-07-03 13:51:40 字數 1265 閱讀 2356

上上篇部落格,寫了我用反射實現動態配置業務的過程,其中有乙個方法是關鍵點,createdelegate。

以前使用委託的時候都是使用把方法繫結給委託的方式,來使用。這次是需要使用methodinfo這個型別來繫結委託,查的資料還是msdn比較詳細。

這個createdelegate一共有。。。好多個過載,我用的只是其中一種:使用指定的物件建立指定型別的委託,該委託表示指定的方法。

這裡我是用的是msdn上的第二個過載,delegate.createdelegate(type,object,methodinfo),三個引數分別是,要建立的委託的型別

public delegate void caller();

public static void demo()

這樣就建立成功乙個委託,並且不需要知道mymethod方法的具體資訊。要是通過反射來獲得methodinfo的話,上上篇部落格中已經寫到了,這裡就不再寫一遍了。

如果是正常情況下,我這種建立委託的方式,createdelegate的第二個引數可以不寫的,本身我們就有乙個委託的物件來接受建立出來的委託,並不需要null這個引數先繫結乙個空值,再繫結到ex物件上,這樣的效率反而低了。但是我在工作流系統中出現了乙個錯誤。

無法繫結到目標方法,因其簽名或安全透明度與委託型別的簽名或安全透明度不相容。

後來解決這個問題就是寫成現在這個樣子,我後來找到了原因,委託型別的宣告,與建立委託的過程,這兩段**是在兩個系統中寫的,所以出現了簽名不一致的情況,網上給出的解決方案是這樣的。

在「解決方案資源管理器」中選定乙個專案,然後在「專案」選單中單擊「屬性」。

在「專案設計器」中,單擊「安全」選項卡。

選擇「啟用

clickonce

安全設定」核取方塊,然後單擊「這是不完全可信的應用程式」選項按鈕。

單擊「高階」按鈕。

選擇「使用選定許可權集除錯此應用程式」核取方塊,然後單擊「確定」。

但是我這裡並沒有找到安全選項卡,所以就只能用這樣的低效率方案了。

AS使用備忘錄

1 使用as打包apk時如何忽略翻譯問題 在build.gradle中做如下配置即可忽略檢測 lintoptions 2 使用as檢視sha1 在as控制台terminal 輸入如下指令即可 keytool v list keystore c users administrator desktop ...

SGAPI使用備忘錄

首先 sgapi必須要修改修改才會好用,才能隨心所欲地用。修改的地方 第一 必須明白這一點 當我們在web頁面頭部寫上時,在web程式執行時,該頁面呼叫的是客戶端本地的view安裝資料夾裡面的sgapi js庫,為了使用自己修改過的sgapi庫,必須將此段 改寫成引用伺服器端的sgapi庫 就是自己...

Softice使用備忘錄

softice預定義功能組合鍵的作用 f1 幫助 f2 暫存器顯示 關閉切換 f3 源程式 反彙編 切換 程式有源程式時可用 f4 softice介面 螢幕原始畫面顯示切換 f5 退出softice視窗 f6 進入 退出 視窗 f7 程式執行到游標所在處 f8 單步跟蹤 f9 在游標所在位置設斷點 ...