2013 オーベールピノノワール UV ヴィンヤード

連載

C#入門

第3回 クラスとオブジェクト

(株)ピーデー
川俣 晶
2001/04/21


クラスとインスタンス

 オブジェクト指向の概念のあるプログラム言語を使ってきた方々なら、この説明は不用だろう。読み飛ばしてしまっても構わないが、多少、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つのインスタンスを作成するプログラム(実行可能なコード)
 

 INDEX
 C#入門 第3回 クラスとオブジェクト
   1.オブジェクト指向とコンポーネント指向
  2.クラスとインスタンス
   3. staticの効力
 
「C#入門」


天然海綿 天然 吸収 洗顔 赤ちゃん 沐浴 出産祝い ファンデーション 指ぬらし デリケートゾーン スポンジ 50個入り レビューでプレゼント

sKs7pqmkby

天然海綿 天然 吸収 洗顔 赤ちゃん 沐浴 出産祝い ファンデーション 指ぬらし デリケートゾーン スポンジ 50個入り レビューでプレゼント

天然海綿 天然 吸収 洗顔 赤ちゃん 沐浴 出産祝い ファンデーション 指ぬらし デリケートゾーン スポンジ 50個入り レビューでプレゼント:コスプレ&衣装 RSTOR

















関連ワード 天然海綿 天然 ボディスポンジ 海綿,大地の恵み、海草からなる天然スポンジ「海綿」が登場しました。50個セットです。吸収率が高いので、ピンポン玉サイズに切ってお使い下さい。
dr.vranjes ドットール・ヴラニエス スタンダード acqua アクア 水 250 フレグランス ディフューザー 新築祝い 引越し祝い 開店祝い プレゼント ギフト 贈り物 人気【正規販売店】,【ポイント16倍以上 9日20:00~16日01:59 エントリー必須】焼香 お焼香 十種香 天人香 125g 紙箱入 玉初堂 日本製 しょうこう てんじん 高級 沈香 伽羅 香木 線香 お香 ご焼香 寺院 お寺 仏壇 法要 寺 送料無料,Yves-Saint Laurent イヴサンローラン クロース オードトワレ スプレー Kouros EDT 100ml spray,★日本未発売★正規品【JESSICA SIMPSON】Jessica Simpson Ten EDP 100ml【ジェシカシンプソン】ジェシカ シンプソン テン EDP 100ml【ブランド香水/フレグランス/レディース・女性用香水/人気香水ランキング/プレゼントギフト】,タマリス ラクレアオー クリアフレッシュ シャンプーC 2000mlラディカルリペア トリートメントR 2000g 詰め替え用 セット,★純正品/送料無料★ゲラン アベイユ ロイヤル ジェル マスク(50ml),【沈香】【刻み】【贈答用】【桐箱】沈香[中泥沈み]20g タトウ紙・桐箱入り【長川仁三郎商店】【マレーシア産】【沈香】【チップ】【お香】【御焼香】【香木】【高級品】【刻み】【沈香】【有煙】【ギフト】,富士フイルム ヘルスケア ラボラトリー アスタリフト(ASTALIFT) ジェリー アクアリスタ 60g T〈BIGサイズ〉【リフィル対応】(16610534) 目安在庫=○,2078 Hotfixクリスタルライトクロームss12 (1440粒入り),アロマの日焼け止めDX(45ml) 10個セット お肌にやさしいノンケミカルの日焼け止め UVカットSPF24 赤ちゃん 子供 沖縄子育て良品,【正規品・送料込】スック コンフォート リップ フルイド グロウ 06 藤雫 -FUJISHIZUKU (6.6g),皮膚科専門医開発クリーム3点+3点 韓国コスメ 福袋 ハッピーバッグ コスメ ギフト セット メディヒール ネーチャーリパブリック ウィッチズポーチ アイシャドウ,【店内全品送料無料】クリスチャンディオール CHRISTIAN DIOR ミスディオールオードゥパルファンEDP 100mL【香水】,DIOR クリスチャン ディオール プレステージ ホワイト ル プロテクター UV シアーグロー SPF50PA 30ml,【正規品・送料込】シスレー エコロジカル コムパウンド(60ml),501 ミニブラシキット 【THE TOOL LAB】【ザ・ツールラボ】【thetoollab】【公式】【正規品】【メイク道具】【メイクブラシ】【韓国コスメ】【韓国メイク】 【ブラシセット】,【正規品・送料込】ボビイブラウン インテンシブ スキン セラム コンシーラー 04クールサンド(7ml),YVES SAINT LAURENT イブサンローラン ピュアショット ローション PURE SHOTS HYDRA BOUNCE LOTION 200ml,THE BODY SHOP ザボディショップ ホワイトムスク オードパルファム 50ml【正規品】,キャビテーションラブ PRO-REX アンチエイジング エステ Y2198778,スック ボリューム アイブロウ マスカラ 04クリア,ドクターシーラボ 薬用アクアコラーゲン ゲル 美白 EX N 200g ポイント消化,ビオリス ボタニカル エステティーク トライアルセット ダメージリペア(288セット)【ビオリス】,ユーカリ・グロブルス 精油 1000ml フレーバーライフ,【定形外 送料無料】ハッチ ハニーローション HINKAKU 150ml -HACCI 1912-【定形外対象商品】,天気丹(チョンギダン) ファヒョン アイクリーム 25ml【ドフー】Radiant Regenerating Eye Cream 25ml【WHOO】【THE HISTORY OF 后】韓国コスメ/ 海外直送/ 送料無料/ しわケア クマ シミ スキンケア★最大10倍ポイント還元★最大2,000円OFFクーポン★,【美容オイルプレゼント】【あす楽】ニューコスメ ウィズアウトEX クレイウォッシュ&パック 220g ×3個セット [ with outex / ニュー・コスメ / NUCOSME / FAITH / 洗顔料 / 洗顔 ]『5』【 送料無料 】※北海道・沖縄除く,【】アロマランプ スクエアパール 010,(×24セット)フォードヘア ルーチェントコスメ α 150g M/M モスブラウン/ミディアム,【3,980円~送料無料】【あす楽13時まで】『×5個』 フィヨーレ Fプロテクト ヘアマスク リッチタイプ 1000g 詰替え用 《FIOLE F-Protect フィオーレ エフプロテクト ヘアマスク リッチ フィヨーレ Fプロテクト 詰め替え 1000 トリートメント 美容室》,ハンディミスト スチーマー 美顔器 携帯 加湿 肌荒れ 保湿 乾燥 肌 フォトフェイシャル フェイススチーマー ポータブルフェイシャルミスト 充電式 タッチビューティ TOUCHBeauty TB-1185 パーソナルケア 送料無料,『Burgundy Hind R』小物入れ・ピルケース・サプリケースイニシャルRデザイン(ゴールド台・丸型)スワロフスキー社クリスタルデコ【限定数Thanks価格】Marathon10P02feb13,GLACELL グラセル ディープモイスチャー アクアローション 120ml 化粧品 化粧水 ローション 保湿 電解還元性イオン水,★最大1,800円OFFクーポン配布中★【限定特典・除菌ジェル付】アリミノ アクアモイスチュア エム 230g ×3個 セット / 【送料無料】 洗い流さないトリートメント 美容室 サロン専売品 美容室専売 おすすめ品,除菌アルコール18ml×100本セット☆アルコール濃度88% 除菌 抗菌 手 指 洗浄 スプレー ウイルス 対策 予防 衛生用品 子供 感染症 高濃度,ロート製薬 SUGAO スフレ感チーク やわらかコーラル 48g,化粧品]★送料無料★※36個セット 日本盛 日本酒の保湿ジェルクリーム 180g 36個 (1ケース36個入り)(スキンケア・日本製)(潤)(オールインワンジェル)(美容液・化粧水・クリーム)(無香料・無着色・弱酸性),【ニナリッチ】 ソルベ ドゥ ベラ オーデトワレ・スプレータイプ 80ml 【香水・フレグランス:フルボトル:レディース・女性用】【NINA RICCI SORBETS DE BELLA DE NINA EAU DE TOILETTE SPRAY】,花王 キュレル 皮脂トラブルケア洗顔料 つめかえ用 130ml×24個 【送料無料】,【送料無料】【お得な5個セット】4Bサンプロテクターエッセンス30ml,【est エスト 】エストG.P. エンリッチドセラム 80g,【ポイント6倍】最大33倍!美容液 美白 ビタミンC アンエアン 1 et 1 30ml 医薬部外品 3本セット,ミルボン オージュア フォルティス スキャルプ マスク 1000g,人毛100%ウィッグ 発毛促進セットとwig capをプレゼント。【かつら】【かつら 女性用】【人毛】【人毛 ウィッグ】【医療用ウイッグ】【医療用かつら】【医療用対応ウイッグ】【医療用対応かつら】,【ふるさと納税】 藍を使った天然化粧品ブランド「ai」 ハンドバーム(無香料)2個|徳島 徳島県 美馬市 四国 ふるさと 納税 支援 支援品 返礼品 特産品 名産品 お土産 土産 お取り寄せ 取り寄せ ハンド クリーム 保湿 バーム スキンケア ハンドケア 敏感肌 プレゼント 化粧品,シュラメック ハイドラマキシマム ナイトクリーム 50ml,2ピースかるネイルチップアクリルホルダーホルダープレゼンツール,【香木 刻】インドネシア産 極上 香木 沈香 刻30g[株式会社日本香堂],送料無料【PRATEM】プラテムプラスアップ棚付きハンガーラック★ 日用品 大容量 ハンガーラック ハンガーラック おしゃれ 棚付きハンガー 室内 干しスタンド 物干し 干し 洗濯 スタンド 物干しスタンド 物干し台 ベランダ 屋外 室内 バ風 に 強い 布団干し 布団,熊野油脂 バックスバニー クレイミント 洗顔フォーム 130G,【送料無料】※ポイント10倍※【グラフィコ】スキンピース ブライトモイストボディ スマイルラベンダーの香り 1ケース(6本入)【ボディミルク】【GR】,ティエリー ミュグレー エンジェル メン ラバーフラスク 100ML EDT SP THIERRY MUGLER 人気 メンズ フレグランス 香水 【楽ギフ_包装】,モルトベーネ スロウ シャンプー エアリー 1000ml 詰め替え 詰替用トリートメント エアリー 1000g 詰替用 カラーシャンプービューティーエクスペリエンスMoltoBene美容室 サロン専売品 美容院 ヘアケア おすすめ品,お得な5本セット 夙 HAYA はや マッサージクリーム リンパマッサージ クリーム 小顔になりたい フェイシャルマッサージ【RCP】,【送料無料・まとめ買い×10個セット】バンダイ ベルサイユのばら レディオスカル リキッドアイライナー ブラック,【正規品・送料込】ジバンシイ ローズ・パーフェクト・リキッド No.22 ベリー・ブレイク (6ml),バイレード ツリー ハウス 250ml ルームスプレー BYREDO TREE HOUSE ROOM SPRAY,1/10は最大8倍!カード&エントリー要♪【アウトレット:箱不良】シャネル イドゥラ ビューティ セラム 50ml(9995891430202)

Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

Insider.NET 記事ランキング

本日 月間
ソリューションFLASH