2018年12月25日 星期二

[點網] .NET 的擴充方法

.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月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 進度與結果。