C# 進階命名慣例

一開始在寫 C# 時,非常建議先看這篇官方文件了解 C# 基本的命名規則和慣例: Microsoft.Learn - C# 命名規則和慣例

不過隨著 C# 越寫越多,會發現 C# 中有其他的命名規則和慣例,並且是在官方文件中沒有明確列出的,本文就來整理一下筆者在開發過程中從官方程式碼庫、開源庫中發現的大家約定成俗的命名慣例。
註:貼上的範例程式碼有經過簡化。

非同步方法以 Async 結尾

一般在寫方法時基本上都是同步方法,如果這個方法是非同步的方法,就會在方法結尾加上 Async 方便辨識這個方法是非同步方法。

例如在常用的用來存取資料庫的套件 Microsoft.EntityFrameworkCore 中就有出現兩種將資料儲存至資料庫的方法,同步的叫做 SaveChanges ,而非同步的方法名稱則是同步的方法名稱加上 Async:
    
// 同步方法
public int SaveChanges()
{
}

// 非同步方法
public Task<int> SaveChangesAsync()
{
}
    

使用命名後綴

在官方文件中有提到 Attribute 後面要加上 Attribute,例如 RequiredAttribute,就有在名稱後面加入 Attribute 代表他是 Attribute 。
上面介紹到的 Async 其實也有相同意思。

還有 Exception 也會在名稱後面加上 Exception,這裡就列出幾個常見的 Exception:
    
ArgumentException
NotImplementedException
FileNotFoundException
    

這種命名後綴很常見,但是其他的編輯器就不會給你「明確的建議」了,是大家約定成俗的習慣。

還是以 ASP.NET Core 舉例,常見的會加上命名後綴的有:
  • Controller
  • Service
  • Repository
  • Middleware

bool 布林值變數/方法使用問句

布林值(bool)在命名時前面通常會使用 Is, Has, Can, Should 之類的英文開頭,方便辨識

例如在 ASP.NET Core 常用的官方身份驗證套件 Microsoft.AspNetCore.Identity 中,UserManager.cs 就可以看到:
    
public virtual async Task<bool> IsInRoleAsync(TUser user, string role)

public virtual async Task<bool> IsEmailConfirmedAsync(TUser user)

public virtual Task<bool> IsPhoneNumberConfirmedAsync(TUser user)

public virtual async Task<bool> IsLockedOutAsync(TUser user)
    

這裡再列出其他常見範例:
    
public bool IsEnabled() => true;

public bool HasPermission => true;

public bool CanExecuteOperation() => true;
    

但是不會使用否定的方式,例如 IsNot, CanNot 之類的開頭,因為使用否定的方式可能較難理解,不直覺。 持續更新中...

延伸閱讀: ASP.NET Core 命名建議

參考資料:
Microsoft.Learn - C# identifier naming rules and conventions

留言

張貼留言

如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com