WisdomSoft - for your serial experiences.

クラス

クラスの宣言方法と、オブジェクトのインスタンス化について解説します。

新しいクラスを作成する

開発者は int や double といった単純型を組み合わせ、新しいデータ型を構築できます。新しく作成したユーザー定義型のデータは、単純型と同じように変数に格納してプログラム内で利用できます。.NET Framework における型の概念では、いくつかの種類に型が分かれます。この場では、C# によるオブジェクト指向プログラミングの基本ともなるクラス型について解説します。

クラス(class)は一連の論理的な関係を持ったデータと、データを処理するロジックを組み合わせた(type)の一種です。実行時に、メモリ上に作られるデータの実体のことをオブジェクト(object)と呼び、クラスは実行時にオブジェクトを生成するためのひな型となります。

私たちは、これまでのプログラムでも 1 つのクラスを作ってきました。C# 言語で作成するプログラムには必ず 1 つ以上のクラスが必要であり、デスクトップアプリケーションであれば Main() メソッドを持つ必要があるからです。コードの先頭に記述していた class Test という部分がクラスの宣言だったのです。この class キーワードを使用することで、クラスを宣言できます

単純なクラス宣言
class クラス名 { クラス本体 }

クラス宣言では class キーワードに続いてクラス名を指定します。クラス名は変数と同じように C# の識別子の命名規則に従います。アンダースコアまたはアルファベットから始まり、2文字目からは数字も使えます。キーワードや他の型と名前が衝突してはなりません。

中括弧によるブロック { } に囲まれた内部にはクラスの本体を指定します。クラス本体(class body)にはメンバ(member)と呼ばれる、オブジェクトが持つデータと機能を記述します。クラス本体に記述するメンバは省略できるので、この場では中括弧内には何も記述しない空のクラスを作成してみましょう。

class A { }

上記はメンバを何も持たない A クラスを宣言しています。

インスタンス化

クラスは新しい型を宣言しているだけであり、クラスを作成しただけでは実行するプログラムの流れには影響しません。クラスのような宣言された型を利用するには new 演算子(new operator)を用いて新しいインスタンス(instances)を作成しなければなりません。new 演算子を用いてインスタンスを生成するには、以下のようなオブジェクト作成式(object creation expressions)を記述します。

オブジェクト作成式
new (引数リスト)

new キーワードの直後には作成するオブジェクトの型を指定します。指定した型がクラスであれば、new 演算子は実行環境の記憶領域にオブジェクトを表現するために十分な領域を確保して、そこにインスタンスを生成し、インスタンスへの参照を式の結果として返します。

クラスがインスタンスの生成に何らかのパラメータを要求する場合、丸括弧 ( ) の中に引数を指定します。これは、クラスによって異なります。詳しくは後述するコンストラクタで解説するので、この場では引数を渡さない、空の括弧を指定します。

用語としてのオブジェクトとインスタンスはほぼ同義ですが、インスタンスと呼んだ場合は記憶領域上に配置された実体もしくは実データというニュアンスを含んでいます。これに対して、オブジェクトとはプログラムから操作可能なデータを抽象的に表現したものです。しばしば強調したい意味によって使い分けられるので注意してください。

new 演算子は、生成したインスタンスへの参照、すなわちオブジェクトを結果として返します。このオブジェクトは、オブジェクトに互換性のある型の変数に格納できます。上で宣言した A クラスがあると仮定したとき、以下のように A 型の変数を用意し、オブジェクトを保存できます。

A obj;
obj = new A();

これで A 型の obj 変数に A クラスのオブジェクトを格納できます。new 演算子によるオブジェクト作成式は、算術演算などと同じように式の一種なので、以下のように変数の宣言と同時に初期化子に指定することも可能です。

A obj = new A();

多くの場合、ローカル変数であれば上記のように宣言と同時に何らかのオブジェクトで初期化することになるでしょう。

コード1
class A { }

class Test
{
    public static void Main(string[] args)
    {
        A obj = new A();
        System.Console.WriteLine(obj);
    }
}
実行結果
コード1 実行結果

コード1では A クラスのオブジェクトを new 演算子で作成し、その結果を obj 変数に保存しています。WriteLine() メソッドはクラス型の変数を受け取ることもでき、オブジェクトの文字列表現(通常はクラス名)を出力します。