学習記事一覧 · C#写経から学ぶ構造の考え方

【学習】正しいC#の書き方:namespace→class→methodの順番

← 第1回 | 第2回 | 第3回 →


はじめに

第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 のテンプレだけだと、SampleProgram という名前が「空っぽ」に感じることがあります。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 を中に作る

methodMainを中に作る

推奨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: なぜ ProgramPlayer の両方?

ProgramエントリポイントMain を置く)という役割でよく使われる名前です。Playerドメイン(ゲームの対象など)を表すクラスの例で、空の枠として並べるだけでも「テンプレの名前だけ」よりイメージしやすくなります。MainPlayer の中に書き換えないでください(入口の役割が分かりにくくなります)。


まとめ

  • 正しい手順:namespace → class(Program)→ method →(推奨:Player などの枠)→ 処理
  • 各ステップで「成立した状態」を保ちながら進める
  • 構造が完成すると IntelliSense が有効になる
  • 処理は一番最後に書く

次の記事

構造が作れるようになったら、次は「プロパティはどのタイミングで書くべきか」という疑問が出てきます。

第3回:プロパティはいつ書くべきか:最後でOKな理由


シリーズ一覧

タイトル
ハブ C#の写経がつらい理由と、正しい学習手順【完全版】
第1回 なぜC#の写経はつらいのか:赤い波線の正体
第2回(この記事) 正しいC#の書き方:namespace→class→methodの順番
第3回 プロパティはいつ書くべきか:最後でOKな理由
第4回 エラーが出たらどうするか:その場で潰す技術
第5回 複数クラスで止まる理由:依存関係を理解する
第6回 Unityで同じことが起きる理由:置き場所という考え方
第7回 プログラミングは構造で考える:写経を超えた先にあるもの