【学習】正しいC#の書き方:namespace→class→methodの順番
はじめに
第1回では、写経がつらくなる原因が「構造が未完成な状態でコードを書こうとすること」だと分かりました。
この記事では、正しい書き方を具体的な手順で解説します。
正しい考え方:「入れ物を先に作る」
C# を書くときの基本原則は一つだけです。
入れ物を先に作る
外側の枠から内側に向かって、順番に構造を完成させていきます。処理を書くのは一番最後です。
正しい手順(基本4ステップ+推奨1つ)
ステップ①:namespace(外枠)を作る
まず一番外側の入れ物だけを作ります。
namespace Sample
{
}ポイント:{ と } を必ずセットで書きます。中身はまだ空で構いません。
この時点でエラーはありません。
ステップ②:class(クラス)を追加する
namespace の中に class を追加します。
namespace Sample
{
class Program
{
}
}ポイント:class も { と } をセットで書きます。
この時点でもエラーはありません。IntelliSense も有効になり始めます。
ステップ③:method(メソッド)を追加する
class の中に Main メソッドを追加します。
namespace Sample
{
class Program
{
static void Main(string[] args)
{
}
}
}ポイント:メソッドも { と } をセットで書きます。
この時点で:
- エラーなし
- IntelliSense フル有効
- コンパイル可能な状態
になります。
(推奨)同じ namespace に Player の枠を追加する
Visual Studio のテンプレだけだと、Sample や Program という名前が「空っぽ」に感じることがあります。Program は入口(Main を置く)という役割の慣習名です。一方で、ゲームなどの「対象」を表すクラスとして、Player という空のクラスを同じ namespace 内に並べておくと、名前に意味が乗り、第3回以降のプロパティや複数クラスにもつなげやすくなります。
Program の閉じ } のあと、namespace が閉じる前に追加します。
namespace Sample
{
class Program
{
static void Main(string[] args)
{
}
}
class Player
{
}
}ポイント:Player にも { と } をセットで書く。中身はまだ空で構いません。クラス同士の上下の順序は、コンパイル上はどちらが先でもかまいません。
ステップ④:処理を書く
構造が完成してから、はじめて処理を書きます(まずは Main の中から)。
using System;
namespace Sample
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
class Player
{
}
}プログラムの流れ
① namespace の枠を作る
↓
② class Program を中に作る
↓
③ method(Main)を中に作る
↓
(推奨)class Player の枠を並べる
↓
④ 処理を書くなぜこの順番なのか
この順番で書く理由は、各ステップで「成立した状態」を保てるからです。
| ステップ | 状態 |
|---|---|
| ① namespace のみ | コンパイル可能・エラーなし |
| ② class Program を追加 | コンパイル可能・エラーなし |
| ③ method(Main)を追加 | コンパイル可能・IntelliSense有効 |
| (推奨)class Player を追加 | コンパイル可能・意味のある名前の例が並ぶ |
| ④ 処理を書く | 実行可能 |
どのステップでも「現時点でエラーが出ない状態」を維持しながら進められます。
逆に「上から書く」方法だと、構造が完成するまでずっとエラーが出続けます。
IntelliSenseが効く理由
なぜ構造が完成していると IntelliSense が効くのでしょうか。
Visual Studio は常にコードを解析しています。その解析の前提は**「今どのスコープにいるか」**です。
メソッドの中にいることが分かれば、そのスコープで使えるメソッドや型を補完として提案できます。しかし構造が崩れていると、今どの位置にいるかが判断できません。
// 構造が完成している → スコープが明確
static void Main(string[] args)
{
Console. ← ここで候補が出る(Mainの中にいることが分かるから)
}Visual Studio での入力を楽にするコツ
Visual Studio では、次のショートカットで { } を自動補完できます。
| 操作 | 効果 |
|---|---|
class と入力して Tab×2 |
クラスのテンプレートを挿入 |
void の後に Tab×2 |
メソッドのテンプレートを挿入 |
{ を入力して Enter |
対応する } が自動補完される(設定による) |
よくある疑問
Q: using System; はいつ書くの?
最初に書いても構いません。using は構造には関係しないため、あってもなくてもエラーの原因にはなりません。ただし、Console.WriteLine など System 名前空間のものを使う場合に必要です。
Q: namespace は必ず必要?
現代の C# (10以降) では namespace を省略して書くこともできます。ただし学習中は構造を意識するために書くことをお勧めします。
Q: なぜ Program と Player の両方?
Program は エントリポイント(Main を置く)という役割でよく使われる名前です。Player は ドメイン(ゲームの対象など)を表すクラスの例で、空の枠として並べるだけでも「テンプレの名前だけ」よりイメージしやすくなります。Main を Player の中に書き換えないでください(入口の役割が分かりにくくなります)。
まとめ
- 正しい手順:namespace → class(
Program)→ method →(推奨:Playerなどの枠)→ 処理 - 各ステップで「成立した状態」を保ちながら進める
- 構造が完成すると IntelliSense が有効になる
- 処理は一番最後に書く
次の記事
構造が作れるようになったら、次は「プロパティはどのタイミングで書くべきか」という疑問が出てきます。
シリーズ一覧
| 回 | タイトル |
|---|---|
| ハブ | C#の写経がつらい理由と、正しい学習手順【完全版】 |
| 第1回 | なぜC#の写経はつらいのか:赤い波線の正体 |
| 第2回(この記事) | 正しいC#の書き方:namespace→class→methodの順番 |
| 第3回 | プロパティはいつ書くべきか:最後でOKな理由 |
| 第4回 | エラーが出たらどうするか:その場で潰す技術 |
| 第5回 | 複数クラスで止まる理由:依存関係を理解する |
| 第6回 | Unityで同じことが起きる理由:置き場所という考え方 |
| 第7回 | プログラミングは構造で考える:写経を超えた先にあるもの |