C#入門⑳ クラスのメソッド ── データに「ふるまい」を持たせる
前回は「フィールドとプロパティ(クラスが持つデータ)」をやりました。
今回は、クラスに処理(ふるまい)を持たせる話。クラスの中のメソッドです。これで、クラスが「データ」と「処理」の両方を持つ、本当の意味でのまとまりになります。
クラスのメソッドとは、そのクラスが持つデータを使って、何かをする処理です。
データだけでは、もの足りない
前回までのクラスは、データ(名前・年齢)を持つだけでした。
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
でも、現実の「人」は、データを持つだけでなく、いろいろなことをします。あいさつをしたり、歩いたり。
クラスにも、データだけでなく「できること(処理)」を持たせられます。それが、クラスの中のメソッドです。
第15回でメソッドをやりましたが、それをクラスの中に書くわけです。
書き方を見てみる
「あいさつする」メソッドを、Person クラスに持たせてみます。
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public void Greet()
{
Console.WriteLine(Name + "です。よろしく!");
}
}
Greet() というメソッドが、クラスの中に入りました。第15回でやったメソッドと、書き方は同じです。
ひとつ大事なのは、メソッドの中で Name をそのまま使っていること。クラスの中のメソッドは、同じクラスが持つデータ(フィールドやプロパティ)を、自由に使えます。
使ってみる
実物を作って、メソッドを呼んでみます。
Person taro = new Person();
taro.Name = "山田";
taro.Greet(); // 山田です。よろしく!
taro.Greet() を呼ぶと、taro の名前(山田)を使って、あいさつしました。
ここがポイントです。同じ Greet() でも、呼ぶ実物によって結果が変わります。
Person hanako = new Person();
hanako.Name = "田中";
taro.Greet(); // 山田です。よろしく!
hanako.Greet(); // 田中です。よろしく!
同じメソッドなのに、taro が呼べば「山田」、hanako が呼べば「田中」。それぞれの実物が、自分のデータを使って動くんです。
データと処理が、ひとつになる
ここで、第18回の「クラスはデータと処理をまとめたもの」という話が、完成します。
class Person
{
public string Name { get; set; } // データ
public int Age { get; set; } // データ
public void Greet() { ... } // 処理(ふるまい)
public void Walk() { ... } // 処理(ふるまい)
}
「人」が、名前や年齢というデータと、あいさつする・歩くというふるまいを、ひとつのまとまりとして持っている。
これが、オブジェクト指向の核心です。現実のものを、「持っているデータ」と「できること」のセットで表現する。「人」も「商品」も「車」も、そうやってクラスにできます。
メソッドの中で、自分のデータを変える
メソッドは、自分のデータを読むだけでなく、変えることもできます。
class Person
{
public int Age { get; set; }
public void BirthYear()
{
Age = Age + 1; // 誕生日がきて、1つ年をとる
Console.WriteLine(Age + "歳になりました");
}
}
Person taro = new Person();
taro.Age = 20;
taro.BirthYear(); // 21歳になりました
taro.BirthYear(); // 22歳になりました
BirthYear() を呼ぶたびに、その人の年齢が1つ増えます。自分のデータを、自分のメソッドで変えていく。クラスが、生きているように動き始めます。
つまずきポイント
初心者が迷うのが、クラスの外のメソッドと、中のメソッドの違いです。
- 第15回のメソッド(クラスの外)… 単独の処理
- 今回のメソッド(クラスの中)… そのクラスのデータを使える処理
中のメソッドは、taro.Greet() のように、必ず実物(taro)から呼びます。「だれの Greet なのか」が決まっていないと、どのデータを使えばいいか分からないからです。
Greet(); // だれの? → エラー
taro.Greet(); // taro の Greet(正しい)
「クラスの中のメソッドは、実物から呼ぶ」。これを意識すると、すっきりします。
まとめ
クラスのメソッドは、そのクラスのデータを使う処理。
class Person
{
public string Name { get; set; } // データ
public void Greet() // 処理
{
Console.WriteLine(Name + "です"); // 自分のデータを使える
}
}
taro.Greet(); // 実物から呼ぶ
- クラスは「データ」と「処理(ふるまい)」を、ひとつにまとめる
- メソッドは、同じクラスのデータを読んだり変えたりできる
- 同じメソッドでも、呼ぶ実物によって結果が変わる
次回は、たくさんの実物を作るときに使う インスタンス の話を、もう少しくわしく見ていきます。

