クラスとインスタンス
オブジェクト指向の概念のあるプログラム言語を使ってきた方々なら、この説明は不用だろう。読み飛ばしてしまっても構わないが、多少、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つのインスタンスを作成するプログラム(実行可能なコード) |
 |  |
ドルチェ&ガッバーナ キング バイ ドルチェ&ガッバーナ EDT オーデトワレ SP 100ml ドルガバ D&G DOLCE&GABBANA K BY DOLCE&GABBANA EAU DE TOILETTE SPRAY
O4gUYv0FuX
ドルチェ&ガッバーナ キング バイ ドルチェ&ガッバーナ EDT オーデトワレ SP 100ml ドルガバ D&G DOLCE&GABBANA K BY DOLCE&GABBANA EAU DE TOILETTE SPRAY

,“キング(King)”であり続ける男性の本質をとらえたフレグランス。カリスマ性と寛大さを体現しつも、男性らしい漂う官能的な魅力を花開かせます。身に纏うとすぐに、イタリアの田園風景と地中海の熱い太陽を思い出させ、包み込むような温かみが樹木の茂ったトスカーナ地方の丘陵の爽やかで、野生的な香りを呼び覚まします。
崇高で威厳のある香りは、柑橘類の生きいきとしたクレッシェンドを大胆に作り出し、燃え立つようなアロマが刺激し、洗練された官能的なウッディノートがそれをしっかり支えて安定感を加えます。
香調:ウッディ アロマティック
トップ:柑橘類、ブラッドオレンジ、レモン、ジュニパーベリー
ミドル:ピーマン、クラリセージ、ジェラニウーム、ラベンダー
ラスト:シダー、ベチバー、パチュリ
【使用上の注意】
●直射日光のあたるお肌に香水をつけますと、まれにかぶれたりシミになる場合がございます。
●可燃性製品は火気には十分ご注意ください。
●傷やはれもの・湿疹など、異常のある部位にはお使いにならないでください。
●フレグランス商品は、シルク・薄い布地や白または淡い色の衣服には、シミになることがありますので、直接おつけにならないでください。
●目に入ったときは、直ちに洗い流してください。
【その他の注意】
●乳幼児の手の届かないところに保管してください。
●極端に高温または低温の場所、直射日光の当たる場所には保管しないでください。
●使用後は必ずキャップをしっかりと閉めてください。
※商品画像は、実際と異なる場合がございますので、店舗等でお確かめの上、ご購入ください。
広告文責 | 株式会社ネイチャー倶楽部 (0120-44-1408)
| メーカー | ドルチェ&ガッバーナ | 区分 | 海外製化粧品 |
|
【クリスチャン ディオール】 ディオールスキン ルージュ ブラッシュ #028 アクトリス 6.7g 【化粧品・コスメ:メイクアップ:チークメイク】【ディオールスキン】【CHRISTIAN DIOR ROUGE BLUSH COUTURE COLOUR LONG-WEAR POWDER BLUSH 028 ACTRICE】,【送料無料・まとめ買い×7個セット】SHO-BI デコラティブネイル オイルトップコ-ト クリア TN81117 9ml,アウトレット送料無料 クリード アバントゥス オードパルファム EDP SP 100ml 香水[1114]訳あり品(外箱不良) CREED[200804-dam407],全国送料無料 ■ランコム アプソリュ リッチ クリーム 60ml,★純正品/送料無料★ナーズ ベルベットマットリップペンシル 2461N(ベージュピンク),【5個セット】 ローヤルゼリーもっちりジェル ジャータイプ 75g×5個セット【正規品】,【送料込・まとめ買い×3】【業務用】ライオン LION ソフトインワン シャンプー 業務用 4L×3点セット(4903301256496),ニューウェイジャパン エコパイトリートメント 800ml,【ケース販売 送料込】 Xfit2P トラベルパック×100個セット (4901331001321),ゼラニウム 50ml,【BOBBI BROWN ボビイ ブラウン】ブライトニング ブリック L01 クランベリー,【店内全品送料無料】シャネル CHANEL No19オードゥトワレットEDT(ヴァポリザター) 50mL【香水】,アルビオン エレガンス ラ プードル オートニュアンス 8.8g II[フェミニン] ALBION Elegance リメイク用フェイスパウダー [国内正規品],アクワレル aquarelle クレンジング 1L (業務用),★純正品/送料無料★ナーズ ベルベットマットリップペンシル 2466N(ライトピンク),【送料無料(全国)】 クロナ クレンジングスパシャンプー スミ 320g×6本セット ミルボン (milbon CRONNA) ヘアカラー用 カラーケア,オブコスメティックス ソープ オブ ヘア 薬用 スキャルプ シャンプー トリートメント オブ ヘア 1RO 265ml x 2RO 210g セット,iGS4000Gelジェル (60包)真芽ブドウ種子成分 『国内正規品』酸化 紫外線 共同研究 GSPP #B1,【JILLSTUART ジルスチュアート】 ブレンドブラッシュブロッサム 04 good afternoon【送料無料・代引き別途送料加算】,【送料込・まとめ買い×72個セット】 富士 マイクロバブルフォーマー あわわプレシャス プレシャスピンク 1個入 1個,ペッドエッグ カルースクリア 10個セット,花王 サクセス薬用シャンプー エクストラクール [つめかえ用] 300ml×24セット Kao Success 4901301289780,エステダム ホワイト ホワイト アイ クリーム 15ml ESTHEDERM,【×3個】スーパーミリオンヘアー (No.3 - ライトブラウン) 30g,業務用キレイキレイ 薬用ハンドソープ 10L [キャンセル・変更・返品不可],ポイント10倍★9-11日20時~4H限定!【セット】ヘレナルビンスタイン HELENA RUBINSTEIN ラッシュ クイーン フェリン ブラック EX 7.2mL 01 ブラックブラック 3本セット,★2021円クーポン配布中 お買い物マラソン★期間限定 送料無料★ヴァルモン D-O2クリーム 45ml | 乾燥 保湿 静電気 | VALMONT ナイトクリーム,太陽と大地のヘナ ナチュラルブラウン(500g) 太陽と大地(),【20個セット】【大感謝価格】吟蔵醸 酒粕マスクパック 1枚入×20セット,ジャンパトゥ JEAN PATOU ジョイ オードパルファムEDP 75mL,【最大300円OFFクーポン対象】ヴィクター&ロルフ VIKTOR&ROLF スパイス ボム EDT SP 90ml【送料無料】SPICEBOMB【あす楽対応_お休み中】【香水 メンズ】,【正規品・送料込】マック リップ スティック ミス(3.0g),スクウィナ ビューティオイル 60ml x 3本(徳用)[送料無料/100%スクワラン/化粧用オイル/SQUINA/マルハニチロ]【smtb-TD】,【シャランドパリ公式】【30%OFF】【ポイント20倍】ステラ トリオ【CHALLANS de PARIS】【正規品】毛穴ケア パッド&アンプル&クリーム 化粧品 韓国コスメ P00000LQ,マッソン フラワーサシェ 巾着 ピンクローズ 不二貿易(),【M・A・C マック】アート ライブラリー: イッツ デザイナー,【ポイント10倍 1月10日&1月11日】Facee ブライトUVクリーム 本体 30g BBクリーム 【送料無料】 アットコスメ 国内正規品,【まとめ買い×012】ツーウェイ カカトのヤスリ ×012点セット(4972525514439),【MARTINA】ジンセナクレンジングミルク,ビセプター アロマオイル WH BO-31 1000mlvie septa コスメ 化粧品 肌,NEWタイムエネルギーモイストファーミングクリーム80ml,ディズニープリンセス【18本セット★はがせるマニキュア 箱入り】キッズ用ネイル/子供用/アリエル/ラプンツェル/ベル/正規ライセンス,(まとめ)貝印 KQ3251甘皮ニッパー 【×6点セット】,【VENUS COSME】VENUS MAGIC Hタイプ 2W(4本) 3300,【美容オイルプレゼント】【あす楽】 SK2 フェイシャルトリートメントエッセンス 230ml パープル KARAN リミテッドエディション 限定品 エスケーツー SK-2 SK-II SKII 『5』【 送料無料 】※北海道・沖縄除く,★お年玉コフレ2021★送料無料★マック パウダー キス リキッド リップカラー ファッション スウィーティー (5mL) ハンドクリームコフレ,【正規品・送料込】エスティローダー テイク イット アウェイ ジェントル アイ&リップ メークアップ リムーバー(100mL),カネボウ アフィニーク (AFFINQUE) CHエッセンス メイクアップベース 全2種 (30ml),【送料無料】BIGZAM ビグザム 6個セット,【ヘルシ価格 】MARY COHR マリコール クレーム エクレシサン ニュイ 50ml,【正規品・送料込】ゲラン ルージュ ジェ リフィル 59(3.5g),ARシリーズ パウダーブラシ 灰リス毛 黒軸 ARB20-2,花王 キュレル 潤浸保湿クリーム 40g×24個 【送料無料】,☆LUCKY BOX★数量限定☆49%↑割引!★全部で8,900円☆福袋企画★【WHOO】【雪花秀(ソルファス)】【LANEIGE】【AHC】【BEmySeLF】【美マイSeLF 】【FARMSKIN】韓国コスメ/ 海外直送/ 送料無料/ プレゼント/ Lucky Bag/ ラッキーボックス/ 化粧品,★純正品/送料無料★マック リップ ペンシル [ルビーウー] (1.45g),ALBIONアルビオン エクシアラディアンスリニュー エクストラリッチミルク 200g,【まとめ買い10個】Dr.Scholl(ドクター・ショール) おそとでメディキュット ハイソックス ブラック Mサイズ 1足,小林製薬 薬用ケシミン ふきとり しみ対策液 160ml
Insider.NET フォーラム 新着記事
Insider.NET 記事ランキング
本日 月間