特選日本酒セット 久保田 大七 スペシャル2本セット1800ml×2本

連載

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


プレミアム沈香 原木姿物 極上シャム沈香 39g

m1tLM7OVOk

プレミアム沈香(じんこう) 原木姿物 「沈水」 極上シャム沈香 39g 【ベトナム産】【】【香木 シャム沈香 沈香木 馬蹄形 笹 寺院 記念品 ギフト 贈り物 お祝い プレゼント 進物 贈答用】

プレミアム沈香(じんこう) 原木姿物 「沈水」 極上シャム沈香 39g 【ベトナム産】【】【香木 シャム沈香 沈香木 馬蹄形 笹 寺院 記念品 ギフト 贈り物 お祝い プレゼント 進物 贈答用】:仏壇 盆提灯 数珠の仏壇屋滝田商店
素材:沈水 極上シャム沈香
重さ:39g
サイズ:一番長い部分 約10.4cm
産地:ベトナム

自然が創る造形美を楽しんでいただく沈香の原木姿物です。
上品な甘味と辛味、さわやかな酸味のバランスが絶妙なベトナム産のシャム沈香の姿物でございます。
こちらの沈香は大変油分が多いため、水に沈みます。
こちらの沈香の原木姿物は、同じものは二つとない一点物のお品物になります。

※ こちらは一点物の商品ですので、ご注文いただいた時点で品切れが発生している場合もございます。ご了承願います。



ギフト対応ラッピング対応のし記名可
,
商品説明

素材沈水 極上シャム沈香
重さ39g
サイズ一番長い部分 約10.4cm
産地ベトナム

自然が創る造形美を楽しんでいただく沈香の原木姿物です。
上品な甘味と辛味、さわやかな酸味のバランスが絶妙なベトナム産のシャム沈香の姿物でございます。
こちらの沈香は大変油分が多いため、水に沈みます。
香りは非常に強く、少量でもかなり香ります。
カッターなどで少しずつ削って、空焚きでもお楽しみいただきたい逸品です。
こちらの沈香の原木姿物は、同じものは二つとない一点物のお品物になります。

素材に見える黒色の部分に沈香油が多く含まれており、その部分には沈香特有のなんとも言えない高貴な香りが凝縮しております。
一般的に沈香は熱を加えることで香りを放つといわれていますが、こちらはそのままの状態でも香りを放っており、常に高貴な香りで安らぎを感じさせてくれます。
このように沈香油を多く含んだ沈香は現在では非常に入手困難です。

【稀少香木】
◆沈香(じんこう)◆
沈香は東南アジアに生息するジンチョウゲ科の植物である沈香木などが風雨などによってダメージを受けた時、その部分からの腐食を防ぐためにダメージ部から分泌する樹脂がもとになって生まれます。
それが蓄積されて長い歳月で厚くなり、ある種のバクテリアの作用を受けて沈香となります。
ただ生えているだけでなく、様々な要因がないと沈香にはならないのです。
また、100年以上の古木でなければ良質の沈香素材とならないため、非常に稀少価値が高い天然香木なのです。
古来より薬用としても知られ、鎮静効果があるといわれております。
戦国時代の武将は、カブトに沈香を焚きしめて出陣したという有名な話があります。
カブトの汗臭さやカビ臭さを抑えるためだけでなく、沈香の香りの鎮静作用で、戦で高ぶる気を鎮めたといわれています。
東大寺正倉院の宝物として納められていることでも有名です。

※ こちらは一点物の商品ですので、ご注文いただいた時点で品切れが発生している場合もございます。ご了承願います。
★超お得な10個セット★【 アロエユトラジェル 99 】 無着色 無香料 全身用 アロエクリーム 肌荒れ 乾燥肌 敏感肌 子ども 赤ちゃん 保湿 アロエジェル オウゴンエキス アロエベラジェル ボディジェル 日本製 広貫堂 髭剃り後 男女兼用 無色透明 夏 べたつかない サラサラ,【あす楽】 ミュゼホリスティックアロマ 精油 ネロリ 5ml [ ミュゼ / リラックス / リラクゼーション / アロマオイル エッセンシャルオイル / ギフト / プレゼント/ お祝い / アロマテラピー ]『5』,【月間優良ショップ受賞】Michael Kors Eau De Parfum Spray マイケルコース オードパルファムスプレー 50ml/1.7oz 【海外直送】,【ロジェガレ】ジンジャー ルージュ パフューム ウォーター・SP 100ml [並行輸入品],★純正品/送料無料★ドルチェ&ガッバーナ ドルチェブラッシュ クリーミーチーク&リップカラー [60],【宅配便送料無料】SK-II SK2 エスケーツー R.N.A.パワー ラディカル ニュー エイジ エアリーミルキー ローション 80g,【送料無料】美顔器 Exideal mini エクスイディアルミニ LED美容器 EX-120 LED 120個 4波長 LED 近赤外線 キメ ハリ 思春期肌 乾燥肌 頭皮ケア 肌ケア クリスマス 敬老の日 母の日 バレンタイン ホワイトデー プレゼント 贈り物 美容機器 ems 巣ごもり,カメヤマ/ウッディーピラー3.25×6 グレー/BA084-00-20GR【07】【取寄】[4個],【国内正規品】 ケラスターゼ DP マスク オレオ リラックス (トリートメント) 500g 業務用サイズ,送料無料 サンタ・マリア・ノヴェッラ オーデコロン ポー・デスパーニュ 100ml[10072] サンタマリアノヴェッラ,XERJOFF セルヨッフ オード スター マムルーク Oud Stars Mamluk EDP 50ml,【送料込・まとめ買い×36個セット】 ギャツビー スタイリング グリース アッパータイト 35g入 1個,Blue Line ブルーラインバスソルト 1kg 2本セットブルーライン バス ソルト 1 kg 2本セットエステサロン美容室 用品,韓国コスメ チャームゾーン Ge スキンケアシート フレッシュシトラスプレミアムモイスト 370枚セット FCPM37,HACCI (ハッチ)セラムインUVボディクリームArm&Back 母の日 バースデー ギフト,【送料込】ラドンナ ラドンナ アロマディフューザー キャンディポット アンバー ADF24-CD-LAM,OUBIオキシーネオパック 肌内部から美しく肌年齢若返りパック,東京甲子社 特製エキシウクリーム 30g 【7個セット】【お取り寄せ】(4987145200228-7),コーセー コスメデコルテ AQ クリーム [ フェイスクリーム ],【3,980円~送料無料】『×5個』 セフィーヌ RA ATP シャンプー 300ml 《美容室 ノンシリコン シャンプー サロン専売品 shampoo エイジングケア》,ヘパスキンリフトアクアコラージュ詰替用200ml ディスペンサー付き,ヒアロジー ピーエフェクト クリーミーウォッシュ 150mL Hyalogy 正規品 送料無料,【正規品】【送料無料】【Estee Lauder】Perfectionist Pro Rapid Firm Plus Lift Treatment3.4ozパーフェクProの迅速な事務所プラスリフトトリートメント【海外直送】,EST エスト エストG.P. エンリッチドセラム リフトモイスト 80g [ 美容液 ]☆新入荷11,【360個セット】税込1個あたり約63.7円!送料無料!卸売り特設会場! 石鹸 せっけん かわいい 景品 粗品 販促品 ノベルティ 小売り 送料込 ◇ 松竹梅 うるおい石けん(コラーゲン配合) 33071,cellmen セルメン フェイシャルクリーム 30mL 男性専用のエイジングトリートメント cellcosmetセルコスメ 正規品 送料無料,ジョルジオ アルマーニ マイ アルマーニ トゥ ゴー クッション 3 15g 限定パッケージ アウトレット,【送料無料】九谷焼 山岸青矢 香器 孔雀 N113-04 【インテリア レビュー投稿で次回使える2000円クーポン全員にプレゼントその他インテリア】,【生活の木】石鹸用ココナッツオイル 16.5kg【ハンドメイド|手作り|石鹸|ハンドメイドソープ|純植物|素材】,2ナノウェーブ (超微粒子高濃度酸素ミスト)高濃度酸素を素早く補給●O2ナノウェーブ本体●O2ナノミスティー(300ml)×2,ニューウェイ ジャパン ナノアミノ トリートメント RS 250g,【×12個】柳屋 オリーブレーベル ヘアエッセンスオイル 100mL,Kanebo Sensai Cellular Performance Lotion IIMoistカネボウ センサイ セルラーパフォーマンス ローション IIモイスト,塗香(ずこう) 塗るお香 ワンランク上の香粉KOKO 891 薔薇の香り 5g母の日 誕生日 父の日 子供の日 おすすめ 送料無料 デザイン 雑貨 便利,カメヤマ/15インチフラワーテーパー ミルキーW/B7183-00-00【07】【取寄】[6箱],九谷焼 K3-1653 4号香炉 本金白粒鉄仙 佐伯信平 サイズ 径11cm × 高12.0cm 6/1457,エスト アクティブオーラクリームファンデーションリフティングカバー ピンクオークル03,発毛専門リーブ21 プロケアシャンプー&コンディショナーW(普通・乾燥肌用) セット 育毛シャンプー スカルプシャンプー コンディショナー アミノ酸 ノンシリコン スカルプケア 育毛 発毛 メンズ レディース 男性用 女性用 男女兼用 発毛促進 2ヵ月分,ジョーウェル スプリーム S2T-30,LANCOME ランコム クラリフィック デュアル エッセンス ローション 150ml 美容化粧水,クイックジャッキ SUV アダプター 送料無料,【】WHITE BEAR(ホワイトベアー) ホワイトバーム オールシーズン 9g×12個セット No.555雪焼け プロテクター 落ちにくい,【正規品・送料込】アユーラ スピリットオブアユーラ オードパルファム(ナチュラルスプレー)(50ml),【正規品・送料込】クリスチャンディオール スノー パーフェクト ライト コンパクト ファンデーション 1CRクールロージー <リフィル>,【送料無料】ヒカリシザー 光 ゲンジ525 5.75インチ【RCP】,【300円クーポン | Fashion THE SALE】送料無料 クレ・ド・ポー ボーテ レオスールデクラ 14 10g x 2 | Cle De Peau ハイライト,【月間優良ショップ受賞】Michael Kors Eau De Parfum Spray マイケルコース オードパルファムスプレー 50ml/1.7oz 【海外直送】,【ウィッグ専用化学染料】テクノエイト テクノヘナ 1000g【ゆうパック対応】,タイタンジェル Titan gel 50ml [並行輸入品],カメヤマ/3×6メタリックピラーキャンドル ゴールド/BA980-01-20GO【07】【取寄】[6個],【ポイント20倍1/9 20時~1/16 1時59分】アデランス ビューステージ ボディスムージングジェル,【送料込】ユニリーバ レセナ ドライシールド パウダースティック 無香性 20g×24個セット まとめ買い特価! 医薬部外品 ( 4902111720234 ),エッセンシャルオイルボックス(特大) 40本収納,【月間優良ショップ受賞】Phyto-C Superheal O-Live Cream (Antioxidant Moisturizing Cream) フィト-C スーパーヒール O-Live クリーム (アンチオキシダントモイスチャークリ 【海外直送】,[uka] ウカ ウェイクアップ! 2点セット ウカシャンプー 300ml & ウカヘアトリートメント 200ml [Wake up!シャンプー&トリートメント/UKA]/管番3000,ゲラン クレヨン スルスィル 01ライト,【正規品】【送料無料】【Orlane】Creme Royale Eyes15mlクリームロワイヤルアイズ【海外直送】,【ポイント6倍】最大33倍!まつ毛美容液 まつげ EGF ヴァレリー Valery 30本 5箱セット

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