.NET 的 擴充方法 (C#/VB.NET)
https://docs.microsoft.com/zh-tw/dotnet/visual-basic/programming-guide/language-features/procedures/extension-methods
https://docs.microsoft.com/zh-tw/dotnet/csharp/programming-guide/classes-and-structs/extension-methods
不用繼承,也不用改變原始程式的情況下,替類別新增新的方法。
## VB .NET
要 Imports System.Runtime.CompilerServices 。
要在 Module 宣告。若要給 dll 外部使用,Module 要宣告 Public。
要擴充的方法上面要加上 <Extension()>,該方法或函式的第一個參數就是要擴充的型別。
可擴充的型別有:
類別 (參考類型)
結構 (實值類型)
介面
委派
ByRef 和 ByVal 引數
泛型方法的參數
陣列
## C#
要定義在 static 物件中的 static 方法。
方法的第一個參數要加上 this 型別。
擴充方法是定義成靜態方法,但透過執行個體方法語法呼叫。
2018年12月25日 星期二
2018年12月24日 星期一
[心得]幾種 系統內溝通 的方式
幾種 系統內溝通 的方式
用 ros 的名詞:topic, service, actionlib
1. topic 方式,有兩個習慣模式
eventbus: event listen/event raise
topic: publish/subscribe
兩者極為相似,也常常被當成一樣的東西。依我的定義,其中不同的地方是:
topic 在系統中,幾乎只有單程,沒有去與回的對應。接收方不需要與發送方互動時使用。也可不理會重覆傳送的問題。
eventbus 在系統中,有可能會存在著事件去與回的處理,每次事件會在乎重覆傳送的判定問題。
但因為這兩種也都可以用簡單程式方式解決掉彼此的差異,所以視為一樣也沒有什麼問題。
2. service 方式
也就是 http 採用的模式,也就是 request/response。必定由 client 發起 request,由 server 送回 response。
3. actionlib 方式
由 client 設定 goal,server 定期或定時回報 progress ,當最後結束的時候回傳 result 的模式。在進行的過程中,還可以 cancel 中斷執行以及查看 status。
這種模式也可由前兩種組合, request/response + event 來做到。流程稍有不同。
client 送出 request,server 回應 response 是否執行,然後由 server 發送 event 來通知 client 進度與結果。
用 ros 的名詞:topic, service, actionlib
1. topic 方式,有兩個習慣模式
eventbus: event listen/event raise
topic: publish/subscribe
兩者極為相似,也常常被當成一樣的東西。依我的定義,其中不同的地方是:
topic 在系統中,幾乎只有單程,沒有去與回的對應。接收方不需要與發送方互動時使用。也可不理會重覆傳送的問題。
eventbus 在系統中,有可能會存在著事件去與回的處理,每次事件會在乎重覆傳送的判定問題。
但因為這兩種也都可以用簡單程式方式解決掉彼此的差異,所以視為一樣也沒有什麼問題。
2. service 方式
也就是 http 採用的模式,也就是 request/response。必定由 client 發起 request,由 server 送回 response。
3. actionlib 方式
由 client 設定 goal,server 定期或定時回報 progress ,當最後結束的時候回傳 result 的模式。在進行的過程中,還可以 cancel 中斷執行以及查看 status。
這種模式也可由前兩種組合, request/response + event 來做到。流程稍有不同。
client 送出 request,server 回應 response 是否執行,然後由 server 發送 event 來通知 client 進度與結果。
訂閱:
文章 (Atom)