CodeGym /コース /C# SELF /C#の典型的なプログラムの構造

C#の典型的なプログラムの構造

C# SELF
レベル 8, レッスン 1
使用可能

1. プログラムは部署がいっぱいあるオフィスみたいなもの

プログラミングを始めたばかりのときは、ただコードを一行ずつ書けば動くって思うよね。でも、ちょっと複雑になると、どこに何があるのか、なんでこう書いたのか、1行変えたいときどこを探せばいいのか…頭がごちゃごちゃになっちゃう。

だからC#も、他のモダンな言語と同じで、コードを「棚」に分けて整理できる方法を用意してくれてるんだ。いつでもプログラムが何してるか分かるし、必要な場所もすぐ見つけられる。

会社を想像してみて。人事部、経理部、IT部、物流部…それぞれの部署に担当エリアとスタッフ、タスクがあるよね。

C#のプログラムでは、こういう「部署」一つ一つがクラスなんだ。例えば、ユーザー管理担当のクラス、計算担当のクラス、ファイル操作担当のクラス、みたいな感じ。

シンプルなプロジェクトの典型的な構成はこんな感じ:

  • Program.cs — 本社:ここが「エントリーポイント」、全部ここから始まる。
  • User.cs — ユーザーデータを保存・処理する部署。
  • Calculator.cs — 計算担当部署。
  • FileHelper.cs — ファイルのスペシャリスト。

小さなプログラムでも、だいたい最低1つはクラスがある。大きなプロジェクトだと、もう何百ものクラスがある「高層ビル」みたいになるよ!

2. クラスはツールボックス

C#はオブジェクト指向言語で、全部がオブジェクトなんだ。オブジェクトの型をクラスって呼ぶよ。

クラスは、必要なもの(変数、メソッド、プロパティ)を入れる箱やロッカーみたいなもの。例えば「ハンマー」って書いてある箱には、ハンマー関連のツールだけが入ってる感じ。

class Example
{
    // ここにツール(変数、メソッド、プロパティ)が入るよ
}
C#でのクラス宣言

クラスには普通、変数と関数が入ってる。C#ではクラスの変数をフィールド、クラスの関数をメソッドって呼ぶけど、意味は同じだよ。

最初に書いたコード、覚えてる?

Console.WriteLine("みんなこんにちは!");
string name = Console.ReadLine();

このコードにもクラスとメソッドがあるよ:

  • Console — コンソール操作用のメソッド(関数)が入ってるクラス。
  • WriteLine — Consoleクラスのメソッドで、画面にテキストを出す。
  • ReadLine — Consoleクラスのメソッドで、キーボード入力を読む。

プログラミングって、結局は自分のクラスやメソッドを書いて、他のクラスのメソッドを呼び出すことなんだ。

3. クラスのフィールド(変数)はその記憶

クラスの中には変数(よく「フィールド」って呼ぶ)を保存できる。これはメモリのセルみたいなもので、データを入れておく場所だよ。

class Counter
{
    int value; // フィールド — Counterの現在値を保存する場所
}
クラスのフィールド(変数)の例

フィールドがあると、クラスは色んなメソッドを呼んでも何かを覚えていられる。例えば、ボタンが何回押されたか数えるとか。

フィールドはいくつでも作れる。例:

class User
{
    int id;             // ユーザーのユニーク番号
    string name;        // ユーザー名
    int age;            // 年齢
    string adress;      // 住所
    User[] children;    // 子供たち
}

4. メソッド — クラスができること

メソッドはクラスの「できること」。クラスが社員なら、メソッドはそのスキルや特技みたいなもの。

  • メソッドは何かを画面に表示できる。
  • 2つの数字の合計を計算できる。
  • データを「受け取って」結果を返すこともできる。

メソッドの構成:

  • 戻り値の型(例えばvoidは何も返さない、intは数字を返す)
  • メソッド名(例:Print)
  • カッコ内のパラメータ(空でもOK)
  • 波カッコ{ ... } — メソッドの本体
class Printer
{
    public void PrintHello()
    {
        Console.WriteLine("こんにちは!");
    }

    public int Add(int a, int b)
    {
        return a + b;
    }
}
クラスのメソッド例

メソッドやその細かい話は、次のレクチャーで詳しくやるよ。

5. プロパティ — 賢い変数

プロパティ(property)は「進化した」変数みたいなもの。値を保存するだけじゃなくて、値を取得・変更するときに何かできるんだ。

例えば、社員の給料を勝手に変えられないよね?経理がちゃんとチェックする。プロパティもデータを「チェック」できる:

class Person
{
    private int age;		// クラスの変数(フィールド)

    public int Age			// プロパティAge。クラスの変数ageにデータを保存。
    {
        get { return age; }	// getメソッド - 誰かがAgeを取得しようとしたとき呼ばれる
        set 				// setメソッド - 誰かがAgeを変更しようとしたとき呼ばれる
        {
            if (value >= 0)
                age = value;
        }
    }
}

setメソッドのコードで、マイナスの年齢は設定できないようになってる。プロパティについては次のレクチャーで詳しくやるよ。

6. アクセス修飾子

C#では、クラスのどの部分が他のクラスから見えるか、どれが内部専用かを決められる。そのためにアクセス修飾子を使うよ。フィールドやメソッド、クラスの前にpublicって書いてあれば、プログラムのどこからでもアクセスできる。

逆に、privateって書いてあれば、そのクラスの中からしかアクセスできない。他のクラスからは見えない。まるで存在しないみたいに。

  • public — みんなから見える。他のクラスからも使えるメソッドやプロパティ。
  • private — クラスの中だけで見える。外からは見えない内部の詳細。
class Demo
{
    public int OpenValue;     // 外から見える
    private int secretValue;  // 中だけで見える

    public void ShowOpen() { Console.WriteLine(OpenValue); }
    private void HideSecret() { Console.WriteLine(secretValue); }
}

ゴールデンルール:フィールドは普通privateにして、外に出すのは必要なメソッドやプロパティ(public)だけにしよう。

7. 実際のクラスはこんな感じ

「組み立てた」例 — ミニ電卓:

class Calculator
{
    private int result; // 結果を保存するフィールド

    public int Result
    {
        get { return result; }
        private set { result = value; } // クラスの中だけでアクセス可
    }

    public void Add(int a, int b)
    {
        result = a + b;
    }

    public void Clear()
    {
        result = 0;
    }
}

こんなやり方は、ほとんどのモダンなC#プログラムで使われてるよ!

8. Top-level statements

実はC#では全てのコードは必ずクラスの中にある。クラスがプログラムの最小単位。クラスは何個でも作れるけど、最低1つは必要。

あれ?さっき書いたコード、クラスなんてなかったよね?って思うかも。

それがC#の新しい機能の一つ。クラスなしでコードを書いても、C#コンパイラが自動でクラスに変換してくれるんだ。

例えば、Program.csにこんなコードがあるとする:

// 君のコード
WriteSmile();
WriteSmile();
WriteSmile();

//自作関数
void WriteSmile()
{
    Console.WriteLine(":)");
}
Top-level statement: クラスなしのコード

C#コンパイラはこれをこう変換する:

using System;

class Program
{
    static void Main()			// 君のコード
    {
        WriteSmile();
        WriteSmile();
        WriteSmile();        
    }

    static void WriteSmile()	//自作関数
    {
        Console.WriteLine(":)");
    }
}
コンパイラがtop-level statementをクラスに変換した例

もしこのレクチャーの半分しか分からなくても大丈夫!大事なのは「なんとなく」分かること。次のレクチャーで、ここに書いてあることを一つずつ詳しくやっていくよ。

2
タスク
C# SELF, レベル 8, レッスン 1
ロック未解除
シンプルなクラスの作成:フィールドとメソッド
シンプルなクラスの作成:フィールドとメソッド
2
タスク
C# SELF, レベル 8, レッスン 1
ロック未解除
複数のメソッドを持つクラス
複数のメソッドを持つクラス
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION