C# 識別子の名前付け規則と表記規則
C# 識別子(名前付け)のポイントをやさしくまとめると
1. そもそも「識別子」とは?
- クラス・メソッド・変数などにつける「名前」のこと。コンパイラはこの名前でプログラムの各要素を区別する。
2. コンパイラが強制する「名前のルール」(守らないとエラー)
- 先頭文字は 英字または _(アンダースコア)。
- 2 文字目以降は英字・数字・一部の Unicode 文字を使える。
- C# の予約語(if,int など)は使えないが、@ を先頭につければ利用可:
int @if = 0; // 予約語 “if” を識別子にした例
- Compiler 生成用に「__」(アンダースコア 2 連続)は取っておく。
3. みんなで読みやすくするための「名前付け規約」(推奨だが強制ではない)
使う場所 | 書き方 | 例 |
---|---|---|
型名・名前空間・public メンバー | PascalCase | DataService, PhysicalAddress |
メソッドの引数・ローカル変数 | camelCase | item, workerQueue |
private インスタンス フィールド | _camelCase(先頭に _) | _workerQueue |
private / internal static フィールド | s_ プレフィックス | s_startTime |
スレッド静的フィールド | t_ プレフィックス | t_cached |
インターフェース | 先頭に I | IWorkerQueue |
属性クラス | ~Attribute で終わる | SerializableAttribute |
例外クラス | ~Exception で終わる | FileNotFoundException |
async メソッド | ~Async で終わる | LoadAsync() |
列挙型 (非 Flags) | 単数形 | Color |
列挙型 (Flags) | 複数形 | FileAccessFlags |
ポイント
- 「意味が伝わる長さ」を優先し、略語は極力避ける(ATM や URL など一般的なものだけ OK)。
- 単一文字の変数名は ループカウンタ限定 にとどめる。
- 規約違反をコンパイル時にチェックしたい場合は EditorConfig の 命名規則を利用すると便利。
4. よくある質問(初学者むけ Q&A)
質問 | 短い答え |
---|---|
Q. _ を名前の途中で使っていい? | public 系では避ける。_ は接頭辞としてのみ使うのが一般的。 |
Q. 予約語をどうしても変数名にしたい | @ を先頭に付ける(推奨はしない)。 |
Q. 2 文字以上の頭字語(XML など)は全部大文字? | 2 文字は大文字 (IOStream)、3 文字以上は先頭だけ大文字 (XmlDocument) が公式ガイド。 |
5. 良い名前付けをまとめて示すサンプルコード
using System;
using System.Threading;
using System.Threading.Tasks;
namespace SampleNaming
{
// PascalCase のクラス名
public class DataService
{
// public フィールド (基本は避ける):PascalCase
public bool IsValid;
// PascalCase プロパティ
public int MaxItems { get; init; }
// private インスタンス フィールド:_camelCase
private readonly IWorkerQueue _workerQueue;
// private static フィールド:s_ プレフィックス
private static DateTime s_startTime;
// コンストラクタ:PascalCase
public DataService(IWorkerQueue workerQueue)
{
_workerQueue = workerQueue;
}
// メソッド:PascalCase、引数 camelCase
public void EnqueueItem(string item)
{
_workerQueue.Enqueue(item);
}
// ローカル変数:camelCase
public int GetQueueLength()
{
int length = _workerQueue.Count;
return length;
}
// async メソッドは Async サフィックス
public async Task LoadAsync(CancellationToken cancellationToken)
{
await Task.Delay(500, cancellationToken);
}
}
// インターフェースは I で始める
public interface IWorkerQueue
{
int Count { get; }
void Enqueue(string item);
}
// Flags 列挙型は複数形
[Flags]
public enum FileAccessFlags
{
Read = 1,
Write = 2,
Execute = 4
}
}
このコードには PascalCase / camelCase / プレフィックスの使い分け がひと通り入っているので、コピペして動かしながら確認すると理解が早まります。
6. 次の一歩
- **Visual Studio / VS Code の「クイックアクション」**でリネーム提案を受け入れるクセをつけると、自然に規約が身につきます。
- プロジェクトに .editorconfig を置き、IDE00xx 系の 命名規則アナライザーを警告→エラーに上げるとチームでも統一しやすくなります。
まとめ
コンパイラが怒る「ルール」と、読みやすさのための「規約」を分けて覚えると混乱しません。まずは PascalCase / camelCase / _ プレフィックスだけ守ってみましょう。
英語説明になっている場合
このリンク画面の左下に言語の選択がありますので、「日本語」の選択をします

訪問数 10 回, 今日の訪問数 1回
ディスカッション
コメント一覧
まだ、コメントがありません