1. プログラムは部署がいっぱいあるオフィスみたいなもの
プログラミングを始めたばかりのときは、ただコードを一行ずつ書けば動くって思うよね。でも、ちょっと複雑になると、どこに何があるのか、なんでこう書いたのか、1行変えたいときどこを探せばいいのか…頭がごちゃごちゃになっちゃう。
だからC#も、他のモダンな言語と同じで、コードを「棚」に分けて整理できる方法を用意してくれてるんだ。いつでもプログラムが何してるか分かるし、必要な場所もすぐ見つけられる。
会社を想像してみて。人事部、経理部、IT部、物流部…それぞれの部署に担当エリアとスタッフ、タスクがあるよね。
C#のプログラムでは、こういう「部署」一つ一つがクラスなんだ。例えば、ユーザー管理担当のクラス、計算担当のクラス、ファイル操作担当のクラス、みたいな感じ。
シンプルなプロジェクトの典型的な構成はこんな感じ:
- Program.cs — 本社:ここが「エントリーポイント」、全部ここから始まる。
- User.cs — ユーザーデータを保存・処理する部署。
- Calculator.cs — 計算担当部署。
- FileHelper.cs — ファイルのスペシャリスト。
小さなプログラムでも、だいたい最低1つはクラスがある。大きなプロジェクトだと、もう何百ものクラスがある「高層ビル」みたいになるよ!
2. クラスはツールボックス
C#はオブジェクト指向言語で、全部がオブジェクトなんだ。オブジェクトの型をクラスって呼ぶよ。
クラスは、必要なもの(変数、メソッド、プロパティ)を入れる箱やロッカーみたいなもの。例えば「ハンマー」って書いてある箱には、ハンマー関連のツールだけが入ってる感じ。
class Example
{
// ここにツール(変数、メソッド、プロパティ)が入るよ
}
クラスには普通、変数と関数が入ってる。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(":)");
}
C#コンパイラはこれをこう変換する:
using System;
class Program
{
static void Main() // 君のコード
{
WriteSmile();
WriteSmile();
WriteSmile();
}
static void WriteSmile() //自作関数
{
Console.WriteLine(":)");
}
}
もしこのレクチャーの半分しか分からなくても大丈夫!大事なのは「なんとなく」分かること。次のレクチャーで、ここに書いてあることを一つずつ詳しくやっていくよ。
GO TO FULL VERSION