クラスとインスタンス
オブジェクト指向の概念のあるプログラム言語を使ってきた方々なら、この説明は不用だろう。読み飛ばしてしまっても構わないが、多少、C#でのオブジェクト指向の構文にも触れるので、斜め読みしていただくとベストである。
さて、オブジェクト指向のなかでも、クラシックなオブジェクト指向と呼ばれるものは、文字どおりクラス(class)とオブジェクト(object)が存在するものである。C#もこの範疇に入る。クラスとは設計図として機能する定義であり、オブジェクトとは設計図に従って製造される製品と考えると分かりやすい。製造された製品はインスタンス(instance)と呼ばれる。例えば、時計の機能を持ったクラスがあり、それにwatchという名前が付いているとしよう。すると、実際に製造された時計は、クラスwatchのインスタンスと呼ばれる。奇異な用語に聞こえると思うが、意味は難しくないので、丸暗記してしまおう。
 |
クラスとインスタンス |
クラスは設計図であり、その設計図を基にして実際に生成された製品がインスタンスである。 |
クラスとインスタンスの関係を見るために簡単なサンプル・ソースを見てみよう。以下は、名前(name)と年齢(age)の情報を含むPersonという極めてシンプルなクラスを作ってみた例である。
1: class Person 2: { 3: public string name; 4: public int age; 5: } |
|
シンプルなPersonクラスの例 |
クラスを定義するには、classというキーワードに続き、クラスの名前を記述する。そして、その後の中括弧{}の内部がクラスの内容となる。stringは文字列型を示すデータ型、intは整数型を示すデータ型のキーワードである。それに続けて変数名を記述すると変数を宣言することができる。手前に付いているpublicは後で説明するが、ここではお約束だと思ってほしい。さて、クラスのなかでこのように変数宣言を行っても、実際の変数は作成されない。なぜならクラスとは設計図なので、これは「変数を作りなさい」という指示を書き込んだと見なされるからである。この変数が本当に作成されるのは、クラスのインスタンスが作られたときである。逆に言えば、ここではnameやageという変数は1個しか宣言していないが。インスタンスは何個でも作ることができるので、変数nameやageは、実際には何個も作られる場合もある。
ここで疑問を持った人もいるだろう。インスタンスを作るというが、具体的にどう作ればよいのだろうか。メソッドのなかで、以下のように記述することはできる。
1: void test() 2: { 3: Person taro; 4: Console.WriteLine(taro.name); 5: } |
|
Personクラスのインスタンスを作成する(エラーになる例) |
これはtest( )というメソッドのなかで、上で宣言したPersonというクラスを利用した例である。だが、このプログラムはまったく機能しない。コンパイルする段階で、「未割り当ての変数taroにアクセスされました」というエラー・メッセージを食らうことになる。Visual BASICやJavaの経験があればピンと来るかもしれないが、“Person taro;”と書いて実際に行われるのは、Personクラスのインスタンスを参照する入れ物としての変数が用意されるだけで、Personクラスのインスタンスが実際に作られるわけではない。インスタンスを作るには、newキーワードを書き込む必要がある。
1: void test() 2: { 3: Person taro; 4: taro = new Person(); 5: Console.WriteLine(taro.name); 6: } |
|
newキーワードを使用してPersonクラスのインスタンスを作成する |
3行目の段階では、変数は準備されるが、中身は空っぽである。4行目の段階で、クラスPersonのインスタンスがnewキーワードにより生成される。生成されたインスタンスは、そのままでは、ただ存在するだけでアクセスすることができない。そこで、空っぽであった変数taroに、インスタンスへの参照を代入(=)する。すると、変数taroを経由して、生成したインスタンスにアクセスすることが可能になる。5行目のConsole.WriteLineというメソッドの引数として指定している“taro.name”は、変数taroを通して、nameというクラス内の変数(メンバ変数)を参照するという意味の記述である。
 |
クラスとインスタンス、インスタンスを格納する変数の関係 |
宣言されたPersonクラスからインスタンスを生成し、その結果を変数taroに代入する。 |
もし、4行目がなければ、変数taroは空っぽであり、インスタンスも生成されていないので、エラーとなり実行は不可能である。
ちなみに、このサンプルソースはそのままでは実行できない。なぜなら、変数nameに文字列を入れるコードが存在しないので、変数nameが空っぽのまま出力しようとしてエラーが起こる。これは以下のように変数に何か代入しておけば回避できる。
1: static public void test() 2: { 3: Person taro; 4: taro = new Person(); 5: taro.name = "太郎"; 6: taro.age = 20; 7: Console.WriteLine(taro.name); 8: } |
|
Personクラスのインスタンスであるtaroの変数nameに値を代入する |
繰り返し説明することになるが、5行目と6行目の代入は、3行目と4行目の間に移動させると機能しない。この時点で、入れ物としての変数taroは存在するが、インスタンスはまだ作られていないためだ。
さて、変数nameや変数ageは1個しか定義していないのに、複数作られる可能性があると書いた。具体的に、どんな状況で複数作られるのだろうか。具体的な一例を以下に示す。
1: static void test() 2: { 3: Person taro; 4: Person hanako; 5: taro = new Person(); 6: taro.name = "太郎"; 7: taro.age = 20; 8: hanako = new Person(); 9: hanako.name = "花子"; 10: hanako.age = 17; 11: Console.WriteLine(taro.name); 12: Console.WriteLine(hanako.name); 13: } |
|
newを2回使用して、Personクラスの2つのインスタンスを作成する |
この例では、newが2回出現することから分かるとおり、2個のインスタンスを作っている。それぞれ、taroという変数とhanakoという変数に参照情報を格納しているが、taroとhanakoではまったく別個のインスタンスを参照しているので、同じ変数nameに値を代入しても、それぞれ別個のものとして扱われる。そのため、hanako.nameに代入したからといって、taro.nameの値が書き替わるわけではない。これを実行すると以下のような結果になる。
|
2つのインスタンスを生成するサンプル・プログラムの実行結果 |
taroとhanakoにそれぞれ独立したインスタンスを生成しているため、taro.nameとhanako.nameはまったく別のものとして扱われる。この結果、「太郎」、「花子」という別の文字列が表示された。 |
なお、ここまでの解説はソースコードの一部分だけを抜粋して解説していたので、実際に実行できるソースコード(最初から最後まで)を以下に示す。メソッドtest( )にstaticが付いている理由は次の章で説明する。
1: namespace ConsoleApplication4 2: { 3: using System; 4: 5: class Person 6: { 7: public string name; 8: public int age; 9: } 10: 11: class Test 12: { 13: static void test() 14: { 15: Person taro; 16: Person hanako; 17: taro = new Person(); 18: taro.name = "太郎"; 19: taro.age = 20; 20: hanako = new Person(); 21: hanako.name = "花子"; 22: hanako.age = 17; 23: Console.WriteLine(taro.name); 24: Console.WriteLine(hanako.name); 25: } 26: 27: public static int Main(string[] args) 28: { 29: Test.test(); 30: return 0; 31: } 32: 33: } 34: } |
|
Personクラスの2つのインスタンスを作成するプログラム(実行可能なコード) |
 |  |
カルトゥージア メディテラネオ パルファム 50ml CARTHUSIA
fZQMJVwHC6
カルトゥージア メディテラネオ パルファム 50ml CARTHUSIA

身にまとった瞬間、摘みたての爽やかなレモンリーフに新鮮なグリーンティーの香りが弾けて、地中海の開放感に包まれます。
創業以来、カプリ島に自生する香り高い果物やハーブなど天然素材だけを使い、古代より伝わるメソッドに従って作られたパルファン。高純度で濃厚な香りでありながら、カプリ島ならではのすっきりとした爽やかな香りをお楽しみいただけます。
トップ:ワイルドミント、レモン、リトセア、ユーカリ、ベルガモット
ミドル:ジャスミン、カルダモン、ワイルドフラワー、マンダリン
ラスト:ホワイトムスク
メーカー Carthusia
広告文責 株式会社エムシーツ 045-482-5961
区分 雑貨・アメリカ、その他
【2020最新版】美顔器 小 EMS美顔器 顔痩せ リフトアップ 振動マッサージ 表情筋 トレーニング フェイスケア 美容器 V 二重顎防,貝印 シェービングジェル3g × 1000個セットヒゲを柔らかく肌にやさしいジェルシェービングスルッと剃れてなめらか感触,【×6個】クレイジー カラー 64 マシュマロ 100mL,【送料無料・まとめ買い×10】DHC 薬用Qローション SS 60ml,スキャルプエッセンス ミューナ 150ml×3本セット自然の恵みを厳選した頭皮にやさしい養毛料【お試し特別価格】【ポイント10倍】【送料無料】,ベストウェイ バハマウェーブアイランド フロート 送料無料,【ポイント6倍】最大33倍!ハトムギ 保湿 ジェル シルキースワン 20g 5個セット,エコレーヌ パーフェクション ベルベット 45ml / 美容液 増量タイプ ビッグサイズ スウェーデン,(12本セット)SpaLuce スパルーチェ フットケアローション 150ml 弱酸性(保湿 角質除去 ボディクリーム ピーリング かかとケア パラベンフリー ギフト プレゼント)(送料無料),ReFa ACTIVE DIGIT リファ アクティブディジット RF-DG2151B-N【0121】【送料無料 お取寄せ】【SIB】,(×15セット)アリミノ ゴールドクイックカラー 1剤60ml/2剤60ml BR-6 (医薬部外品),メイクブラシARBセット 20-3、8-3、12-1、12-4、12-3、10-1、8-1、6-2、6-3、4-1,ナリス化粧品 マジェスタ クリーム,ジレット Gillette Labs ヒーテッドレーザー 髭剃り カミソリ 男性 本体+替刃2個付+充電器,九嶺堂 熊野筆 名匠の技巧シリーズ KTブラシ8本セット KT010,ハベノア ラベンダー&オレンジ リードディフューザー アロマディフューザー 芳香剤,ロレアルケラスターゼREフォンダンエクステンショニスト業務用1000ml《ポンプ付き》【メール便は使えません】,3個セット【限定サンプルプレゼント】 [エポラーシェ] UVデイクリーム&ベース SPF45!PA++紫外線カット日焼け止め(顔用)&化粧下地(ファンデーション)無鉱物油 無香料 パラベンフリー タール系色素不使用 EPORASHE トリプルサン化粧品 (岡江美希),Helenarubinstein(ヘレナ ルビンスタイン)リプラスティ CC+,【3,980円~送料無料】『×5個』 デミ ユント シャンプー スムース 600ml 《DEMI ノンシリコン シャンプー》,【最大400円クーポン】【3,980円~送料無料】【x5個セット】 【在庫限り】 資生堂プロフェッショナル アデノバイタル シャンプー 250ml,【医薬部外品】数量限定【送料無料】ポーラ(POLA) リンクルショット シーズンスペシャルキット N,ミルボン プラーミア ヘアセラムシャンプーFトリートメントF 2500ml2500g 詰め替え用セット,【×3個】ルベル プロエディット ケアワークス ヘアトリートメント ソフトフィット プラス 1000mL 詰替え用,コスメデコルテAQ MW クリーム エクセレント 50g,デオドラント【メール便 送料無料】,★純正品/送料無料★マック プロ ロングウェア ウォータープルーフファンデーション NC35 (26g),【送料無料・まとめ買い×7個セット】ロート製薬 SUGAO シルク感 カラーベース ピンク 20ml,●最大3,600円OFFクーポン●Yves Saint Laurent イヴサンローラン モン パリ オーデパルファム アンタンス 90ml 【宅配便送料無料】,ドクターシーラボ アクアコラーゲンゲル エンリッチリフトEX (120g) オールインワンゲル,エントリーで千円割引付!【海外直送:日時指定不可】ネオレチン ジェルクリームSPF50 40ml 3本 Neoretin Discrom Control Gelcream SPF50ヘリオケア ジェルクリーム:ヤマト国際便発送,【×12個】サローネ スーパーブラウン ボリュームアップ フォーム 150mL,【先着順!クーポン対象】エルコス TIクレンジングゲル 1000g×3個セット(頭皮用クレンジング),Albion(アルビオン)EXCIA AL(エクシア AL リニューイング)ジョイ フルール クレンジングオイル,パシフィックエッセンス アバンダンス 4点セット日本国内正規品,1/10は最大8倍!カード&エントリー要♪【アウトレット:箱不良】クリスチャンディオール プレステージ ローション ド ローズ 150ml(9998901454407),マリークワント MARY QUANT マリクワ マリークアント ポーチ 化粧ポーチ リラクシングカモミール スクエアペンケース (ブラック),【代引・日時指定・北海道沖縄離島配送不可】アロマランプ ピンクパビリオン 012,コスメデコルテ AQ MW エクストラ プロテクション [医薬部外品] 60g SPF40/PA++ DECORTE,ランコム イプノ パレット 05,【花王】 クリーン&クリーンF1 つめかえ用 4L 508041 入数:1 ★お得な10個パック★,THREE(スリー)THREE バランシング ビラブド バスエッセンス 7.5mL×3本,アイビルD2ワールドボルテージ32m カールアイロン ヘアーアイロン ヘアアイロン コテ ヘアコテ 巻き髪 ウェーブアイロン アイビル ヘア イオンカール プロ カール D2ワールド ボルテージ,<セット>セフィーヌ RA-ATP (RÅ ATP) シャンプー 800ml & トリートメント 800g ポンプ ボトル /ラ・エーティーピー/CEFINE/美容室 サロン専売品 美容院 ヘアケア おすすめ品,アニックグタール プチシェリー EDP オードパルファム SP 50ml (香水) ANNICK GOUTAL 【あす楽】,バルブ アトマイザー L チューブ 水晶 フロスト 4704 メタル シルバー,◆最大2000円引クーポンあり1/16 9:59迄◆ エバメール ゲルクリーム ポンプSタイプ 500g ≪真空パウチタイプ≫ ☆{ Evermere Gel Cream スキンケア ☆☆,超音波ピーリング ピンク KBE-2710/P送料無料 超音波 ピーリング フェイスケア おうちエステ クレンジング 角質 汚れ落とし コイズミ 理美容 小泉成器 【D】,♪PU #詰め替え用 1L【oggi otto】オッジィオットペネトレーションウーレ #詰め替え用 1L(1000ml)<ヘアケア・トリートメント><浸透型尿素><レフィル・リフィル・業務用>,【送料無料・まとめ買い×5】ハイドロ3プレミアム替刃 8コ入 ×5点セット ( 4891228302702 ),単品販売ウエラ サン プロテクションクリーム 150mL[代引選択不可]洗い流さないトリートメント ウエラ(WELLA),エルメティカ グリーンライオン オードパルファン 50ml【Hermetica Greenlion EDP 50ml】,リスブラン ノンEクリーム 徳用 340g リニューアル品,【×3個】ムコタ シェーナ カローレ 750g 詰替え用,h&s for men PRO Series エナジー コンディショナー ポンプ 350g 【10本セット】 (4902430816199-10),1/10は最大8倍!カード&エントリー要♪ランコム アプソリュ レクストレ 50ml(3614271834256),GB KENT 英国製 イギリス製レクタンギュラー クラブハンドルヘアブラシ OS11,RMK マット マスカラ N 01 [並行輸入品]
Insider.NET フォーラム 新着記事
Insider.NET 記事ランキング
本日 月間