【学習】C# クラスが分からない人へ(まずは「まとめる」と気づく)
これまでの学習では、
stringやintに値を入れる- 変数をいくつか並べて使う
という形でプログラムを動かしてきました。
しかし、データが増えると 別の困り方 が出てきます。
名前と HP がバラバラの変数だと、誰の値か分かりにくい
という状況です。
今回は「説明から入らず」、普通に書いたあとで違和感が生まれる流れで、class が欲しくなる理由にたどり着きます。
ソリューションとプロジェクトを作る
Visual Studio で次のプロジェクトを作ります。
- テンプレート: コンソール アプリ
- プロジェクト名:
ClassAwakening01(任意)
以降のコードは Program.cs の Main に書いて実行できます。
まずは普通に書いてみる(1人)
キャラクターを1人分だけ書きます。
string name = "勇者";
int hp = 100;
ここまでは問題ありません。
2人に増やす
string name1 = "勇者";
int hp1 = 100;
string name2 = "戦士";
int hp2 = 120;
これもまだ普通です。
少しだけ作業を増やす(HP を減らす)
hp1 -= 10;
hp2 -= 20;
ここで立ち止まって考えてみる
次のような気持ちになりませんか?
- 名前と HP を セットで扱いたい
hp1が 誰の HP か、コードを読むたびに確認したくなる- 人数が増えたら 同じパターンの変数が増えそう
もし「なんかゴチャゴチャしてきた」と感じたなら、それが スタート地点 です。
キャラクターは「セットの情報」
キャラクターが持っている情報の例です。
- 名前
- HP
- (あとから)攻撃力 など
つまり ひとまとまりのデータ です。
その「セット」を型として書く
ここで初めて class を出します。
class Player
{
public string Name;
public int Hp;
}
使ってみる
Player p1 = new Player();
p1.Name = "勇者";
p1.Hp = 100;
Player p2 = new Player();
p2.Name = "戦士";
p2.Hp = 120;
p1.Hp -= 10;
p2.Hp -= 20;
さきほどの name1 / hp1 と比べて、読みやすさや間違いにくさを感じたら、その感覚で大丈夫です。
さらに楽にする(コンストラクタ)
いまは2行で初期化しています。
p1.Name = "勇者";
p1.Hp = 100;
作るときにまとめて決めたい ときに使うのがコンストラクタです。
class Player
{
public string Name;
public int Hp;
public Player(string name, int hp)
{
Name = name;
Hp = hp;
}
}
呼び出しは次の1行になります。
Player p = new Player("勇者", 100);
難しく考えなくて大丈夫です。「キャラクターを new するときに、最初から中身を決めている」 だけです。
完成コード(例)
using System;
namespace ClassAwakening01
{
class Player
{
public string Name;
public int Hp;
public Player(string name, int hp)
{
Name = name;
Hp = hp;
}
}
internal class Program
{
static void Main(string[] args)
{
Player p1 = new Player("勇者", 100);
Player p2 = new Player("戦士", 120);
p1.Hp -= 10;
p2.Hp -= 20;
Console.WriteLine($"{p1.Name} の HP は {p1.Hp}");
Console.WriteLine($"{p2.Name} の HP は {p2.Hp}");
}
}
}
プログラムの流れ
Player を new する(名前と HP を決める)
↓
フィールドを使って HP を変更する
↓
表示する
重要ポイント(用語はここでまとめる)
クラス は、この記事では次のように捉えれば十分です。
- 同じ種類のデータをまとめるための型
クラスは 暗記する道具 ではなく、変数が増えて困ったときに自然に欲しくなる道具 です。
最後の問い(次回への扉)
「勇者を 3人 作る」としたら、どう書きますか?
new Player(...)を増やす発想になれたら OK です。name1, name2, name3のように 変数名だけが増える のが一番ラクに見えるなら、もう一度この記事を最初から読むか、次回 List で人数を増やす で「変数名を増やさない」方向を試してください。
発展アイデア
- クラス気づき学習シリーズ(目次)
- WinForms の一覧に進む前の補助として、List で人数を増やす へ進む


ディスカッション
コメント一覧
まだ、コメントがありません