C# 中委託實例的命名規則

  • 2020 年 2 月 10 日
  • 筆記

我們知道一個類中的屬性應該用名詞或名詞性短語,方法用動詞或動賓短語;但是委託的實例卻似乎有一些遊離。因為在 .NET 中委託代表的是一個動作,既可以把它看作是名詞,也可以看作是動詞。在用法上,既可以像屬性和變量一樣被各種傳遞,也可以像一個方法一樣被調用。

那麼委託實例的命名,應該遵循屬性和變量的命名,還是遵循方法的命名呢?


委託的實例可以當作屬性或者變量使用:

var action = () => Console.WriteLine("walterlv is a 逗比");

委託的實例也可以當作方法使用:

var action = () => Console.WriteLine("walterlv is a 逗比");  action();

於是委託的命名方式遷就名詞還是動詞呢?

在微軟的官方文檔 Naming Guidelines 中提到了 .NET 中約定的命名方式。對於委託的命名,實際上只在 Names of Type Members 中提到了,不過提及的實際上是事件型的委託,而不是一般的委託實例。然後,微軟其他地方的官方文檔中也沒有單獨提及委託的命名方式。

為了弄清楚第一方代碼的命名規則,我去 https://source.dot.net/ 上找了一些使用了委託的代碼,然後發現,對於 ActionFunc 系列委託的命名,有以下這些(部分名稱只保留了後綴進行合併):

使用名詞的:

  • action
  • function
  • callback
  • continuation
  • method
  • factory
  • valueFactory
  • creator
  • valueGetter
  • initializer
  • _target
  • attributeComputer
  • argumentsPromise
  • taskProvider

使用動詞的:

  • getSource

使用縮略詞的:

  • localInit

我把縮略詞單獨拿出來,是因為縮寫了以下就看不出來這到底是縮自名詞還是縮自動詞。

基本上可以確定:

委託實例的命名是 —— 一個表示動作的名詞


參考資料

本文會經常更新,請閱讀原文: https://blog.walterlv.com/post/name-convention-of-delegate-instance.html ,以避免陳舊錯誤知識的誤導,同時有更好的閱讀體驗。

本作品採用 知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議 進行許可。歡迎轉載、使用、重新發佈,但務必保留文章署名 呂毅 (包含鏈接: https://blog.walterlv.com ),不得用於商業目的,基於本文修改後的作品務必以相同的許可發佈。如有任何疑問,請 與我聯繫 ([email protected])