4 box of Organo Gold Cafe Supreme 100% Certified

連載

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


NONON 除毛クリーム

tMJmgetpFB

(3個セット) NONON(ノンノン) 除毛クリーム ()

(3個セット) NONON(ノンノン) 除毛クリーム ():ビューティーブリッジ
,商品名
(3個セット) NONON(ノンノン) 除毛クリーム ()

メーカー
JAPAN SACRAN株式会社

商品説明
高級シアバター配合の除毛クリーム。
自宅で簡単5分でつるんっ!
塗るだけで、うぶ毛、ムダ毛、剛毛を簡単に除毛することができます。

医薬部外品成分であるチオグリコール酸カルシウムを配合。
自己処理のようなぽつぽつした見た目にならず、つるんとした肌をキープできるのでまるでサロン脱毛。

「高級シアバター」をはじめ「大豆エキス」「シソエキス」などの美容成分配合だから除毛しながらつるすべ肌へ導きます。

除毛剤特有のツンとした嫌なにおいを軽減し、アプリコットのジャスミンの香り。

内容量:120g×3個セット

成分
チオグリコール酸カルシウム、シア脂、ダイズエキス、シソエキス(1)、水酸化カルシウム、1,3-プロパンジオール、1,2-ペンタンジオール、グリセリンモノ2-エチルヘキシルエーテル、ポリオキシエチレンセチルエーテル、ステアリルアルコール、パラフィン、流動パラフィン、水酸化ナトリウム、1,3-ブチレングリコール、香料

【広告文責】インパクト株式会社
【区分】ボディーケア用品、除毛・脱毛
■5個セット■サンコール キートス ヘアクリーム 《6》 205g /Kiitos/SUNCALL/美容室 サロン専売品 美容院 ヘアケア おすすめ品,アディクション ザ アイシャドウ ティント 001T4971710289572,【エレクトロン エブリワン ELECTRON EVERYONE シンクロブラッシュ メーカー公式 電子水 電子コスメ フェイスブラシ メイクブラシ,ラロッシュポゼ トレリアンフォーミングクレンザー [3本セット]【洗顔料/乾燥肌/敏感肌/低刺激/フェイスケア】【おすすめ】,【バストケアマッサージジェル】3本セット VIVA CUTIE produced by cellnote ビバ・キューティ プロデュースド バイ セルノート 100g 女性の理想のボディラインづくりをサポート,資生堂 [クレ・ド・ポー ボーテ]ラ・クレームn  クリーム 30g【国内正規品】,【正規品・送料込】キールズ シャンプーAA(500ml),ディプティック diptyqueオードパルファン オー キャピタル 75ml EDP/SP,ヘレナルビンスタイン HR プロディジーCELグロウエッセンスファンデーション 00 30ml,マルト長谷川 MARUTO グルーミングキット GM-0405B (5点セット) 2005年グットデザイン選定商品 熟練の職人技 [送料無料][代引手数料無料] [北海道,沖縄は送料別途1,080円],エバメール ゲルクリーム詰替1000 1000g,バイタルワークス PGエッセンス 30mlサロン専売品,美顔器 パナソニック ナノケア EH-SA3B-N スチーマー コンパクト ゴールド調,1/10は最大8倍!カード&エントリー要♪【アウトレット:箱不良】ランコム アプソリュ プレシャスセル アイクリーム 20ml(9995533350058),【ポイント10倍&10%OFFクーポン使用可 1/1~】幹細胞 高濃度 30% 配合 美容液 エッセンス プレミアム クリア セラム ヒトユライ HITOYURAI+30 Premium Clear Serum 化粧水 ローション 美容液 乳液 クリーム マスク 日焼け止め UV,【お買い得3個セット】プリマヴィスタ 皮脂くずれ防止化粧下地UV SPF20 PA++ FED ONLINE,【テュエリーミュグレ―】 エイリアン (箱なし) オーデパルファム・スプレータイプ 60ml 【香水・フレグランス:フルボトル:レディース・女性用】【エイリアン】【THIERRY MUGLER ALIEN THE NON REFILLABLE STONES EAU DE PARFUM SPRAY】,ブレンドブラッシュブロッサム 04 good afternoon,【正規品・送料込】イトリン エレメンタリー ボディソープ N(200ml),【2本セット】ラシンシア レッドデュア ホワイツエクス スクラブクレンジング 120g×2本 サロン専売品 脂性肌 アクネ肌向け洗顔料 La Sincia 正規品 送料無料,【×6個】コラージュ フルフルネクスト リンス (すっきりさらさらタイプ) 400mL,(ホテルアメニティ)(パウチ)貝印 シェービングジェル (SHAVING GEL) 3g × 1000個セット - ヒゲを柔らかく、肌にやさしいジェルシェービング。スルッと剃れてなめらか感触。,[全国どこでも送料無料(配達日時指定不可)][あす楽対応]POLAポーラ スキンケア B.A クリームリフィル 30g [正規品、新商品] 【Pola、ビーエー、新BA、ポーラスキンケアBAクリームリフィル、詰め替え用】,★お年玉コフレ2021★送料無料★アルビオン エクシアAL アイブロウ コンパクト GR70(2.0g) ハンドクリームコフレ,【ラブコスメ公式】プエラリア ハーバルジェル&エクストラジェル|(プエラリア 高配合 ジェル バストジェル バストマッサージ ジェル バストケアクリーム・ジェル バストアップ クリーム プエラリアミリフィカ 恋ジェル 胸 垂れ ない プレゼント おうち時間 送料無料),ウェーブ バリニーズオイル TVNo2 500ml,【先着順!クーポン対象】ロレアル アレクサンドル ドゥ パリ アンペリエル グラン ローション 150ml|ヘアケア サロン専売 美容室専売 美容院 美容師 おすすめ 人気 ランキング クチコミ 女性 男性 レディース メンズ ユニセックス ロレアル 化粧水 美白,【正規品・送料込】ジョルジオアルマーニ アイズ トゥ キル デザイナー アイライナー 3,エスティローダー マイクロエッセンスローション (化粧水) 200ml【ネコポス不可】,【ポイント6倍】最大33倍!トルーク 薬用ホワイトニングフェイスジェル 50g 医薬部外品 オールインワンゲル ジェル メンズ 送料無料,【先着順!クーポン対象】ARTISTIC&CO ミスアリーヴォ Dear Miss PCS ディアーミス・プロブレム コントロール ソリューション(皮脂トラブル肌用美容液) 30ml,【3,980円~送料無料】【送料無料】『×4個』 ルベル イオ リコミント クレンジング アイシー 2500ml 詰替え用 《ルベル イオ シャンプー 詰め替え用 美容室 サロン専売品 ノンシリコン シャンプー shampoo》,ジョンマスターオーガニック ハニー&ハイビスカス リペアシャンプー 1035ml / John Masters Organics,資生堂クレ・ド・ポーボーテ クレームデマキアント 125g(お一人様1個限り),短いブロンドのストレートサイドパート女性傾斜前髪ボブウィッグ14インチのヘアピース,パコラバンヌ ピュア エクセス EDT オーデトワレ SP 100ml PACO RABANNE PURE XS EAU DE TOILETTE SPRAY,GUERLAIN(ゲラン)モン ゲラン ブルーム オブ ローズ オーデパルファン 50mL,【”店内全品10倍” 1月9日(土) 20:00~1月16日(土) 01:59】カオティックシザーケース 506N (5丁用) -全12色-【受注生産のため返品・交換・キャンセルはお受けできません】,【3,980円~送料無料】『×5個』 デミ ユント シャンプー モイスト 600ml 《DEMI ノンシリコン シャンプー》,【ポイント16倍以上 9日20:00~16日01:59 エントリー必須】焼香 お焼香 十種香 天人香 125g 紙箱入 玉初堂 日本製 しょうこう てんじん 高級 沈香 伽羅 香木 線香 お香 ご焼香 寺院 お寺 仏壇 法要 寺 送料無料,【×3個】ルベル イオ セラム クリーム (トリートメント) 2500mL 詰替え用,【M・A・C マック】ハイパー リアル グロー パレット: フラッシュ + オー,ナカノ フォリッジ スキャルプエッセンス EX-RD[200ml]×3本セット[医薬部外品],《送料無料》《セット》オイルトリートメント ライト 200ml(ポンプ付)&R ヘアマスク 500g 【moroccanoil・モロッカンオイル】【正規品・サロン専売品】◆お中元・お祝い・ギフト・お誕生日プレゼントにも◆,【3個セット】ケラスターゼ DS デンシフィック アドジュネス 120ml 洗い流さないヘアトリートメント 国内正規品 即日発送 誕生日 プレゼント ギフト 引越し祝い 母の日,【正規品・送料込】ルナソル クリーミィマットリクイドリップス 04 Deep Garnet(6g),【送料込・まとめ買い×240個セット】貝印 HL0165SS ヘアターバン ポニーテールタイプ 1個入 1個,【送料込】 KQ3251 甘皮ニッパー ×6個セット,香炉・香立て■ 駒型 鐶付菖蒲地紋 ■村田宏作 合金製 化粧箱入【高岡銅器】,【DIPTYQUE ディプティック】ソフト ボディローション 250ML,フラコラ リフテスト プロテオグリカン 原液 ×5本セット,SK- 【未使用◇】MASTERPIECE PITERA ESSENCE マスターピース エッセンス 一般肌用化粧水 150ml 化粧品・コスメ レディース,【すぐ使える500円OFFクーポン対象】桜アイエッセンス,サラヤ 油汚れ用ハンドソープ スクラビンクリア 17kg 八角BIB 〔品番:23127〕[2083185],ペンハリガン PENHALIGONSザ ルースレス カウンテス ドロシア オードパルファム 75ml香水 レディース,OUBIオキシーネオパック 肌内部から美しく!肌年齢若返りパック,【公式/送料無料】ちゅらめぐり ボディー マッサージオールインワンジェル 3個セット むくみ 美容成分,★カネボウ正規取引店 ★ミラノコレクション フェースアップ パウダー 2021 本体 (24g)※お1人様2個まで

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