メソッドとクラスの理解はC#において欠かすことのできない概念なので、一番最初の山場となるでしょう。簡単に言ってしまうと「クラスは設計図」であります。筆者はC#になれるまで「クラスとインスタンス」の概念が難しくて、なかなか理解することができませんでした。そんな私でも今ではエンジニアとして現場に立っているわけですから、慣れてしまえば意外とどうにかなるものです。
クラスを使う方法
では早速ですが、クラスの基礎知識から一歩進んで、実際に簡単なアプリケーションを作成して、クラスをつくってみたいと思います。新規のコンソールアプリケーションを作成して、以下を記述してみましょう。詳しい説明は後にします。
using System;
namespace App01
{
class Program
{
static void Main(string[] args)
{
//太朗酸を生成する
Person Taro = new Person();
Taro.Name = "太朗";
//太朗さんの名前を出力する
Console.WriteLine(Taro.Name);
Console.ReadLine();
}
//人間を定義するクラス
public class Person
{
//名前
public string Name;
}
}
}
クラスを定義する
それではクラスの作成方法を解説していきます。クラスを定義するには「クラスを定義しますよ」と明示的にキーワードを使用して宣言する必要があります。先ほどのサンプルにおけるクラスの定義箇所は以下になります。
//人間を定義するクラス
public class Person
{
//名前
public string Name;
}
クラスを定義するには「(アクセス修飾子) class (クラス名)」と記述する必要があります。ここにおける「アクセス修飾子」は「public」としています。アクセス修飾子については、別の機会に詳しく解説する予定ですので、いまは気にせずに覚えておいて下さい。
今回は「Person」というクラスを定義しています。「クラスは設計図である」と前章で紹介しています通り、ここでは「人間」を定義するための「名前」を保有できる変数を用意しています。
要するに「設計図の中にどんな属性を持っているか」を定義しているわけです。あなたにも私にも、はたまた生まれてきたばかりの赤ちゃんにも「名前」はありますよね。しかしながら、名前を持った私たちは同じ人間であっても、それぞれ違った「人」として認識されますよね。これが「インスタンス」です。
ちなみに「public string Name」のように、値を保有できる変数を「プロパティ」と呼んでいます。
また、クラスのインスタンスの内部のプロパティにアクセスする場合は「(インスタンス変数名).(プロパティ名)」になります。「Taro.Name = “Taro”;」は、Taroというインスタンスの「Name」プロパティに「Taro」という文字列を代入していることになります、
クラスをインスタンス化する
クラスを定義するには「(アクセス修飾子) class (クラス名)」で記述する必要がありますよ、と前項で解説しました。今回はそれによって定義されたクラスの「実態を生成する方法」についてみていきます。
先ほどのサンプルにおいて、「実体を生成する過程」すなわち「インスタンス化」が行われている箇所は以下の通りとなります。
//太朗さんを生成する
Person Taro = new Person();
一般的に人間というと多くの人が存在しています。ここでは、実体を作るというインスタンス化を説明するために太朗さんだけにご登場いただいております。クラスという設計図から実体を生成するには「newキーワード」と呼ばれる記載が必要です。
具体的には「(クラス名)(インスタンス変数名) = new (クラス名)();」という記述になります。上記の例では、クラス名は「Person」であり、インスタンス変数名が「Taro」に該当します。その後のクラス名はご理解いただけるかと思います。
「new」というキーワードを使用することで「〇〇クラスの実体を新しく生成しますよ!その名称は××ですよ!」と明示的に謳おうとしているわけです。またインスタンス変数は、基本的に変数名と同じであり、それぞれの実体を識別するためのキーワードのような物になります。
インスタンス化にはnewを使う
クラスをインスタンス化する方法は慣れないかもしれませんが、これはもう書きまくって覚えるしかありません。設計図であるクラスからインスタンスを生成するには「new」を使用すると覚えておきましょう。逆に「new」が使われている場合は「実体が生成されている」と思えるようになれば十分かと思います。