白子のり のりお茶漬け詰合せ BT301A3

連載

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#入門」


ブレンドブラッシュブロッサム 03 happy sunny

stZr7QrsEh

【JILLSTUART ジルスチュアート】 ブレンドブラッシュブロッサム 03 happy sunny【・代引き別途送料加算】

【JILLSTUART ジルスチュアート】 ブレンドブラッシュブロッサム 03 happy sunny【・代引き別途送料加算】:ciel market
ツヤもフォギーも自由自在。叶えたい仕上がりをつくる2色のチーク。,
商品詳細
メーカーJILLSTUART
内容量7.5g
商品特長●1つのコンパクトに、春らしいピンクを含んだ2色がセットのチークカラー。溶け込むように頬になじみ、ふんわりとフィットし、やわらかな血色感を叶えます。ツヤ感のあるグロウカラーとシアーマット感のあるフォギーカラーは、重ね方次第で様々な質感と色合いを演出。
●チークカラーはそれぞれ単色の鮮やかな発色を楽しんだり、2色のグラデーションで自然な色づきを演出することができます。また、05~07のグロウカラーはハイライトとしてもお使いいただけます。
●コンパクトを開けると、2色にまたがったアラベスクのレリーフ模様と、Jロゴのプレスを施した優雅なデザインとなっています。
●これまでのパッケージにはなかった新しいカットを施し、まるで宝石のようなデザインに仕上げました。天面にはJロゴとレリーフを中心に、複雑なカットがきらびやかに輝き、コンパクトを持つたびにときめきを呼び起こします。
●毛の長さを調整できるチークブラシ付き。クリスタルのスワロフスキー®を施しています。
●クリスタルフローラルブーケの香り。
カラー01 blooming bud
咲き誇る花々のように鮮やかなピンク
02 sugary lollipop
ロリポップキャンディーのように甘いピンク・レッド
03 happy sunny
暖かな日の光を浴びて幸せな気分のようなオレンジ・ピンク
04 good afternoon
心地よい午後のひとときのようなピュアピンク
05 new romantic
新たな出会いを予感させるようなベージュピンク
06 blissful time★色
春の素敵なひとときのようなラベンダー・ピンク
07 hello spring★色
春の訪れを祝福するようなブルー・ピンク
※フォギーカラーはすべてノンパールー
成分参考公式サイト
備考ご注文後のキャンセルはお受けできませんのでご了承ください。
広告文責株式会社ciel TEL05252182202
アロマ アロマオイル 精油 エッセンシャルオイル 季節のアロマ 冬用 ユーカリ ティートリー オレンジスィート パルマローザ ホーリーフ リッツァクべバ FUYU 100ml,ウォブスタイル GFディープモイスチャー 60g保湿クリーム スキンケア 肌トラブル エイジングケア フェイスクリーム ハリ フェイスケア 美容クリーム 保湿 潤い 乾燥肌 キメ ツヤ肌 ハリ感 透明感 美容オイルゲル オイルゲル,Aランク 研ぎ・メンテナンス済み【シザーズジャパン】Aシリーズ セニング すき鋏23目 【美容師 理容師【期間限定 送料無料!!】】 E-1937,ルベル ヴィージェ シャンプー 600ml & ヘアトリートメント S 600ml & ルートケアミスト 180ml & メディケートエッセンス 100ml 送料無料(全国) セット ビージェ くせ毛 ボリュームアップ 野菜,ディオールカプチュールトータルインテンシブナイトクリーム60mlクリスチャンディオール,Christian Dior クリスチャンディオール プレステージホワイトルプロテクターUVミネラル SPF50+ PA+++ 30mL 【少量漏れ 訳あり商品】,【送料無料】エレガンス ラ プードル オートニュアンス リクスィーズ 本体 27g ◆III ナチュラル(穏やかさ)◆ ※専用パフ付き フェイスパウダー Elegance 国内正規品 プレゼント インスタ映え 艶肌 えれがんす ぷーどる,アルガンオイル 1000ml 定形外郵便OK スキンケアオイル マッサージ キャリアオイル 保湿 無添加 植物性 年齢肌 肌荒れ 手作りコスメ 乾燥肌,【正規品・送料込】スック フレーミングアイブロウ リキッド ペン 04グレー(0.6ml),パコラバンヌ ワンミリオン コレクターズエディションEDT100ml【パルファムワールド】,【送料無料】テクノエイト ロハス ハーブシャンプー ブラックモイスト 2000ml&トリートメント ブラックモイスト 2000g セット 詰め替え用 レフィル,【送料無料】フリープラス freeplus モイストリペアクリーム 40g 2個セット,【送料込・まとめ買い×200個セット】ロート製薬 メンソレータム トーンマイリップ ブロッサムピンク 2.4g リップクリーム,クリード Creed オリジナル サンタル フレグランススプレー 100ml/3.3oz【海外直送】,ジュンコスメティック ナノセーブ スキンクリーム 50g,ソイワックス 10kg 素材 キャンドル ロウソク フレーク 植物性ワックス ソイキャンドル ティーキャンドル アロマキャンドル 天然ワックス ベジタブルワックス,【送料込・まとめ買い×3】HB0330 Amazing smoother01 電動角質リムーバー (4901601300802),【ポイント6倍】最大33倍!ハーバルラビットナチュラルゲルクリーム 35g 医薬部外品 5本セット,「送料無料」コーセー ONE BY KOSE 薬用保湿美容液 ラージ 120mL,プルレルリジェネレイティブセラム50ml,【ポイント10倍 1月10日&1月11日】Rodial(ロディアル) ラッシュ アンド ブロー ブースター 7ml まつげ美容液 【送料無料】 アットコスメ 国内正規品,【アベダ】 インバティ アドバンス ヘアデンス コンディショナ― 1000ml 【ヘアケア:リンス・コンディショナー:本体】,SK-II SK-2 スキンパワー エアリー 50g[配送区分:A],パイモア スペクトラムカラーズ 400g ビビッドグリーン ×10セット,Davines Momo Moisturizing Shampoo (For Dry or Dehydrated Hair) ダヴィネス モモ モイスチャライジングシャンプー (乾燥&水分不足の髪用) 1000ml/ 【海外直送】,【送料込・まとめ買い×20個セット】 ジレット カスタムプラス3 スムース 12本入 1個,【ポイント16倍以上 9日20:00~16日01:59 エントリー必須】焼香 お焼香 五種香 聖薫香 500g 紙箱入 玉初堂 日本製 しょうこう 沈香 白檀 香木 線香 お香 ご焼香 寺院 お寺 仏壇 法要 寺 送料無料,2078 Hotfixローズピーチss16 (1440粒入り 業務用パック),ローラ メルシエ ピュア キャンバス プライマー ブラーリング トラベルサイズ,【 3個セット 】sognando ソニャンド 珠肌ランシェル 美容ジェル オールインワン スキンケア ハリ 弾力 卵殻膜 保湿 乾燥 美容 配送料無料 / 珠肌ランシェルF04-L8 / TMHLNS-03P,Giorgio Armani ジョルジオアルマーニ シィ パッション ナクレエディション オードパルファムスプレー Si Passione Nacre Edition EDP 100ml spray,【最大400円クーポン】【3,980円~送料無料】【あす楽13時まで】【x5個】ナンバースリー ミュリアム クリスタル 薬用スカルプシャンプー A 500ml 詰替え用 医薬部外品《ナンバースリー シャンプー 詰め替え 頭皮 フケ ふけ かゆみ 臭い ノンシリコン シャンプー shampoo》,医療用ウィッグ ショートバングス 濃い茶色 ダークブラウン HS4 女性用 自然 ウィッグ ショート 助成金対応 全頭かつら オールウィッグ,クラランス スープラ ネック&デコルテ 75ml SUPER RESTORATIVE DECOLLETE AND NECK CONCENTRATE,ルベル(LebeL) ナチュラルヘアソープ ウィズ JO (ホホバ 1000ml)& ナチュラルヘアトリートメント ウィズ RP (ライスプロテイン 980g),【ohui】 【1909MS】よりファーストツェナーミニチュアセルエッセンシャルソース企画セット【海外直送】【プレゼント】【韓国】,ラスト1個.現品限りです。早い者勝ち【即納】Colantotte コラントッテ TAO ネックレス AURAプレミアムゴールド【smtb-KD】,【4000円offクーポン(要獲得) 1/28 9:59まで】 【送料込み】 オーダドリアン EDT・SP 50ml 【グタール】【香水 フレグランス】【レディース・女性用】【オーダドリアン 】【GOUTAL EAU D’HADRIEN EAU DE TOILETTE SPRAY】,TS-049 セット台 ホワイト 取り寄せ商品B,キューサイ コラリッチ 薬用美白BBクリーム 25g 3本まとめ買い,【送料込・まとめ買い×24個セット】ユニリーバ LUX ラックス スーパーリッチシャイン モイスチャー リッチ 保湿ミスト 180ml,福袋 2021 DDS MATRIX あらゆる肌悩みへ つるつる美肌 モンドセレクション 最先端美容 ホームケア 限定価格 キメツヤハリ フェイシャルホームエステ ヒト幹細胞 EGF FGF ヒアルロン酸 エラスチン I・TEC 送料無料,【KOSE】【コーセー】 コーセー ナチュリティ シャンプー&コンディショナー10ml ラミネート2連(500個ペア)1個あたり13円,ポイント10倍★9-11日20時~4H限定!【セット】ニュクス NUXE プロディジューオイル 100mL 3個セット,【5個セット】 スーパーミリオンヘアー ブラック トライアルセット 10g+60mL×5個セット 【正規品】,アルビオン フローラドリップ 160ml ALBION [国内正規品],五洲薬品 MPF(モイスチャープロフェッショナルフォーミュラ) うるおいソープ 12個セット MPF-S,Nordic Collectionノルディックコレクションリードディフューザー ブラックアンバー (詰替用)×6本MRUS-480ML 【ノルディックディフューザー、ディフューザー、ノルディック、リードディフューザー、MRUS-480ML、ブラックアンバー、詰替え、詰替え用】,【限定品】☆国内正規品☆SK2 ピテラTM パワー キット ファンタジスタ 歌磨呂 リミテッドエディション,【当店は3980円以上で送料無料】アイシャンプー 200ml 3個セット,【期間限定エントリーで全品P5倍】 トクヨバイオテック HEALTHPIT 美眼BIGAN BE-110B,HYP コーンロット セット 解説ビデオ付き,【送料無料】オッペン oppenDRブライトアップ エンリッチオイル 20ml送料無料 (北海道、沖縄、離島、一部山間は別途1,100円必要となります。),(REDECKER/MUHLE) トラベルシェービングブラシ,【4000円offクーポン(要獲得) 1/28 9:59まで】 【送料込み】 アクア ケンゾー EDT・SP 100ml 【ケンゾー】【香水 フレグランス】【レディース・女性用】【アクア ケンゾ 】【KENZO AQUA KENZO POUR FEMME EAU DE TOILETTE SPRAY】,ヒロソフィー 桜Cクリーム 2個セット,ルビパール サンスクリーンミルク 日焼け止め乳液 SPF30 PA++ 30mL 【3個セット】(4987047171756-3),ミルボン オージュア ディオーラム シャンプー 250ml ヘアトリートメント 250g セット(セット販売のみの購入になります)

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