クラス

おおざっぱに言えば、クラスというのは、関連する変数やメソッドの入れ物である。 したがって、クラスを上手く利用すれば、変数(フィールド)やメソッドの整理整頓ができ、可読性や利便性に優れた コードが作成できる。

自作Personクラス

年齢と名前を持つPersonクラスを自作する。

int型のAgeとstring型のNameを変数として持つPersonクラス

class Program
{
    static void Main(string[] args)
    {
        Person p = new Person();
        if (p.Age == 0)
        {
            Console.WriteLine("Age is 0.");
        }
        if (p.Name == null)
        {
            Console.WriteLine("Name is null.");
        }
    }

}
class Person
{
    public int Age;
    public string Name;
}

実行結果.

Age is 0.
Name is null.

解説.

クラス定義部分は

class Person
{
    public int Age;
    public string Name;
}

の個所であるが、フィールド(変数)として、int型のAgeとstring型のNameを定義している。 「public」というものがついているが、これはアクセス修飾子とよばれ「外部のクラスから利用できるように 公開します」という宣言であると認識すれば良い。

Main関数の最初の行

Person p = new Person();

の右辺

Person()

は「コンストラクタ」と呼ばれ、ここで「インスタンス」というデータの「実体」を作り「フィールドを初期化」している。 コンストラクタは自作もできるが、自作しなくてもこのプログラムのように使用できる。 この用意されたコンストラクタは、各変数を「既定値」に初期化する役割を持つ。

既定値は、string型なら「null」, int型なら「0」というように定められており、 上のプログラムの実行結果により、確かにこれらの既定値に初期化されていることが理解できる。

既定値以外の値を採用するには次のようにする。

フィールドの設定例(1)

class Program
{
    static void Main(string[] args)
    {
        Person p = new Person();
        p.Age = 30;
        p.Name = "Taro";
        Console.WriteLine(p.Age);
        Console.WriteLine(p.Name);
    }
}
class Person
{
    public int Age;
    public string Name;
}

実行結果.

30
Taro

解説.

インスタンスからフィールド(変数)を取得するには

インスタンス.変数名

とするが、フィールドを設定するときは

インスタンス.変数名 = 設定する値

とする。

次のように自作コンストラクタを定義し、インスタンスを適当な値に初期化するように定義することもできる。

フィールドの設定例(2)

class Program
{
    static void Main(string[] args)
    {
        Person p = new Person(30,"Taro");
        Console.WriteLine(p.Age);
        Console.WriteLine(p.Name);
    }
}
class Person
{
    public int Age;
    public string Name;
    public Person(int age, string name)
    {
        Age = age;
        Name = name;
    }
}

実行結果.

30
Taro

解説.

次の部分がコンストラクタ(自作)と呼ばれる部分である。

public Person(int age, string name)
{
    Age = age;
    Name = name;
}

基本的にコンストラクタというのは、通常のメソッドと同じように定義できるが、 決定的に異なる点は、次の2点である。

  • 返すデータ型を記述しない.
  • メソッド名が、クラス名と同じ.

年齢と名前を同時に出力するPrintメソッドを自作する。

メソッドの利用例

class Program
{
    static void Main(string[] args)
    {
        Person p = new Person(30,"Taro");
        p.Print();
    }
}
class Person
{
    public int Age;
    public string Name;
    public Person(int age, string name)
    {
        Age = age;
        Name = name;
    }
    public void Print()
    {
        Console.WriteLine($"年齢は{Age}.名前は{Name}です.");
    }
}

実行結果.

年齢は30.名前はTaroです.

解説.

メソッド定義部分は

public void Print()
{
    Console.WriteLine($"年齢は{Age}.名前は{Name}です.");
}

であるが、フィールドと同じように外部クラスから利用する場合には、 「public」を付与する必要がある。

メソッドを外部クラスから呼び出す際は、

インスタンス.メソッド名(引数)

という形で呼び出すことができる。