C#におけるクラスの基礎知識

この記事ではクラスの基礎知識について解説していきます。

クラスの概念は難しい

実際のサンプルコードでアプリケーションを作成する前にクラスの基本的な概念から解説していきます。クラスを理解するのは正直大変ですので、このタイミングですべてを理解する必要はありません。

C#の学習を進めていくことで、ある日突然「クラスがなんとなく理解できた!」という日がくるかと思います。その時まで自然に身を任せてクラスを使っていけばよいと思います。

実際に私もクラスの概念は理解するのが大変で、プログラミングを初めて少したってから、ようやく理解できるようになったくらいでした。一発で覚えることは不可能に近いので、気長に取り組んでいけば理解できるようになるはずです。

C#におけるクラスとは

プログラミングにおける一つの難関であるのが「クラス」と呼ばれる概念です。クラスとは「オブジェクトを作る設計図のようなもので、オブジェクト指向プログラミングの中心となる考え方のこと」です。

と言われたところで理解しづらいかもしれませんので、もう少しかみ砕いて説明していきます。C#に限らないことですが、C#では処理・操作の対象を「オブジェクト」と呼ぶことになっています。オブジェクトとは即ち現実世界の「物」に相当する考え方です。「実体」とも言われます。

クラス = 設計図 と考えてみる

現実の世界における「車」について例えてみましょう。「車」は様々な会社が製造・販売を行っています。車を製造するには、あらかじめ「設計図」が必要になりますよね。車の設計を行い、細かい所作や部品、寸法など事細かに決められます。

設計図が完成したら製造に入ります。人やロボットの手によって製造の段階を経て、車は「実体」としてこの世に生まれ出てくることになります。設計図の段階では「存在している」とは言い難く、人の手によって組み立てられて初めて「車」と呼ばれる物が生まれます。これが「クラス」と「実体」の関係です。

プログラミングもイメージとしては全く同じです。プログラミングにおけるクラスとは「オブジェクト」の様々な操作の方法などを定義しておきます。そしてプログラミングで「生成する」過程を経て「オブジェクト」と呼ばれる「実体」を作り出します。

クラスとして様々な属性や機能を定義しておいて、その設計図を使った機能が必要になったときになって、「クラス」から「オブジェクト」を作成すればよいのです。

これも車と同様で、設計図にあたる「クラス」を定義するだけでは「存在している(使用できる)」とはいわないので注意しましょう。そして「生成する」という過程を、「インスタンス化する」とC#では呼んでいます。

インスタンスを生成する

さて「クラス」から生成する段階(インスタンス化)を経て作成されるのが「実体」と呼ばれるものですが、これを「オブジェクト」と呼んでいます。とまではすでに解説しました。クラスはあくまでも「オブジェクトのための準備」のようなものでした。

機能などが記述されたクラスから、「インスタンス化」と呼ばれる「実体化する作業」を経て、初めてオブジェクトが生成されます。ここでは「インスタンス化」についてもう少し深堀していきたいと思います。インスタンスを生成するというのは、「実体を生成する」という意味になりますが、ここで質問です。

同じ設計図から生まれた「実体(オブジェクト)」が2つあるとして、これは「同じオブジェクト(物)」といえるのでしょうか?

少し考えてもらえれば分かると思いますが、これは「NO」ということになります。機能や詳細スペックなどは同じかもしれませんが、それぞれの「実体」は異なっています。

例えば車に例えて言いますと、同じ車種であっても、それぞれ製造された車は異なるオーナーの元へと納車されていきますね。同一の車種(同じ設計図から生まれる車)で機能は全く同じであっても、製造される個体は異なるものであり、決して同一ではなく、区別されて認識されるべきなのです。

クラスは設計図で、オブジェクトは実体

プログラミングも同じような考え方をしています。クラスという設計図から生成される各オブジェクトは、同一の機能を持っていたとしても異なる「実体」になります。インスタンス化する、というのは「機能は同じでも、実体の異なるものを作成する」という意味があります。