Van Houtte CHOCOLATE RASPBERRY TRUFFLE72 KCups

連載

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


ロコベースリペア クリーム 30g ※お取り寄せ商品

8cKSS4egs1

【お得な10個セット】【第一三共ヘルスケア】ロコベースリペア クリーム 30g ※お取り寄せ商品【RCP】

【お得な10個セット】【第一三共ヘルスケア】ロコベースリペア クリーム 30g ※お取り寄せ商品【RCP】:あんしん通販 リリーフ

特 長
つらいドライスキンに。水に強く、保湿効果が長時間持続します
ドライスキンの人に不足しがちな肌脂質成分を3種類(セラミド3、コレステロール、遊離脂肪酸(オレイン酸、パルミチン酸))バランスよく配合。
外部刺激や乾燥から肌を守りながら、角質層に働きかけ、保湿効果が持続します。
ナノ粒子化された油成分(パラフィン:保湿)が角質層に密着する、しっかりハードタイプのクリームです。
なめらかな使用感のシアバター(シア脂)を配合。皮脂膜の働きを助け、高い保湿効果が期待できます。
こだわりの香料・着色料・防腐剤無添加。低刺激性処方。

◆使用方法
1.クリームを手のひらに、直径1センチくらいの大きさにとる。
2.クリームを両手ではさみ、じっくり体温でやわらかくする。
3.やわらかくなったクリームをゆっくりやさしく伸ばすと少量でもしっかり保湿できます。

◆ご注意
肌に異常が生じていないかよく注意してご使用ください。使用中に、赤み、はれ、かゆみ、刺激、色抜け(白斑等)や黒ずみ等の異常があらわれた場合、使用した肌に直射日光があたって同様の異常があらわれた場合は、使用を中止し、皮ふ科医にご相談ください。使用を続けると症状を悪化させることがあります。
傷やはれもの、湿疹等、異常のある部位には使用しないでください。
肌の弱い方は腕の内側の皮ふの弱い部分に少量を塗布し、赤みやかゆみが起きないことをご確認ください。
目に入ったときは、直に洗い流してください。
乳幼児の手の届かない所に保管して下さい。
極端に高温又は低温の所、直射日光の当たる所には保管しないで下さい。
使用後は必ずキャップをしめて下さい。
防腐剤を添加しておりませんので、開封後はお早めにご使用下さい。

メーカー(※製造国または原産国)
第一三共ヘルスケア株式会社
※製造国または原産国:日本

お客様相談室 電話:0120-337-336
受付時間:平日9:00-17:00(土、日、祝日、当社休日を除く)


成 分
ワセリン、水、BG、パラフィン、オレイン酸ソルビタン、グリセリン、(パルミチン酸/エチルヘキサン酸)デキストリン、ミネラルオイル、カルナウバロウ、コレステロール、セラミド3、水添レシチン、パルミチン酸セチル、オレイン酸、パルミチン酸、アルギニン、(アクリレーツ/アクリル酸アルキル(C10-30))クロスポリマー、セタノール、シア脂

【ご注意1】この商品はお取り寄せ商品です。ご注文されてから発送されるまで約10営業日(土日・祝を除く)いただきます。
なお、商品によりましては、予定が大幅に遅れることもございますので、何卒あらかじめご了承お願いいたします。
【ご注意2】お取り寄せ商品以外の商品と一緒にお買い上げの場合は、全ての商品が揃い次第の発送となりますので、ご了承下さい。

※パッケージデザイン等が予告なく変更される場合もあります。
※商品廃番・メーカー欠品など諸事情によりお届けできない場合がございます。
商品区分:【化粧品】
【広告文責】株式会社メディスンプラス:0120-205-904 ※休業日 土日・祝祭日
文責者名:稗圃 賢輔(管理薬剤師)
【ヘルシ価格】【3個セット】生活の木 トリートメント アルガン・バオバブ&ネロリ 500ml 08-027-2020×3個セット【返品キャンセル不可品】【割引不可品】,ロレアルケラスターゼDSフォンダンデンシフィック(スカルプ・ヘアトリートメント)1000g《ポンプ付き》【メール便は使えません】,(まとめ)KQ3151 薄刃カットハサミ 【× 12 点セット】,The history of 后 拱辰享 水 スヨン 2点セットGongjinhyang Soo Yeon 2PCS Set乾燥水分不足,【塗香入れ】天竺菩提樹ネジ式蓋仕様★収納袋サービス。箱入り塗香入れ 塗香 持ち運び 清め 巡礼 写経,【x5個セット】 【在庫限り】 アリミノ ケアトリコ プリヴィ エンリッチセラム 1000g 詰替え用,【ホテルアメニティ】【使い捨てカミソリ】【個包装タイプ】業務用 使い捨てカミソリ2枚刃 TD-708 ×1000個セット - 個包装(小分け)で衛生的で携帯に便利。ホテル、ソープ、洗浄・洗体スポンジ、温泉・銭湯・サウナ、業務用、髭剃り、ヒゲソリ【smtb-s】,<選べるセット>デミ ビオーブ スキャルプシャンプー 2000ml & トリートメント 2000g 詰替用 《リフレッシュスキャルプ|モイストスキャルプ|スキャルプリラックス|ヘアリラックス》 /医薬部外品/DEMI/サロン専売品 美容院 ヘアケア おすすめ品,クリストリオ CHRISTRIO ジェラッカービルダークリア 1ozクリストリオ ジェラッカービルダー クリア 1oz美容 コスメ 化粧品 コスメチック コスメティック,【正規品・送料込】クリスチャンディオール スノー パーフェクト ライト コンパクト ファンデーション 1Wウォーム <リフィル>,ミドリ安全 ハンドクリーナー Mハンド PRO/CORN 15KG詰替え用ハイテナー MHAND-PRO/CORN-15KG ▼115-6460 ミドリ安全(株),羊水 遠赤キャップ,【当店は3980円以上で送料無料】アウラ グラージュミスト D・E・O 100ml 3個セット,【まとめ買い】 ユニリーバ ダヴ ボタニカルセレクション ビューティーレジリエンス 泡洗顔料 つめかえ用×24個セット まとめ【送料無料】,【APOTHIA アポーシア】IF body wash,【送料込・まとめ買い×5個セット】P&G ジレット スキンガード 電動タイプ 替刃 大容量パック 8個入,【送料込・まとめ買い×60個セット】シック・ジャパン シック クアトロ4 フォーウーマン シェービングジェル 100g 1個,SUNCALL MINTVELL サンコール ミントベル マリンブルーシャンプー スキャルプ コンディショナー1700ml 675g 詰替 セット,【並行輸入品】シャネル No.5EDT50ml(オードトワレ) 【香水】【宅配便送料無料】 (6001534),ディオール カプチュール トータル ドリームスキン ケア&パーフェクト50ml DIOR CAPTURE DREAMSKIN CARE & PERFECT,【国内正規品】CHANEL シャネル チャンス オー タンドゥルオードゥ パルファム EDP SP 100ml,期間限定 送料無料ドットール ヴラニエス ロッソノービレ ルームフレグランス750mlDr Vranjesルームディフューザー,(まとめ) 花王 メリット リンスのいらないシャンプー 詰替【×10セット】 送料込!,白雪美精 フェイススノークリーム 3個セット,本気足痩せセット!たっぷり200g!×2本脂肪 燃焼 クリーム セルライト除去 ローラー マッサージローラー 足 両手用2個!脂肪 燃焼 脚痩せ ボタニカル 太もも リンパマッサージ スリミングジェル むくみ 二の腕【クリーム+マッサージローラー各2個セット】,【BREAST PATCH 10パック入り 】DESIGN YOUR BEAUTY バストパック 1枚入り バストケア バストケアパック バスト補正 美乳 うるおい成分 バストパッチ バストボリューミングパック ボディケア その他,【定形外 送料無料】イヴ・サンローラン アンクル ド ポー オール アワーズ セッティングパウダー 選べる全4色展開 -YSL-【定形外対象商品】,メナード イルネージュ クリーム 30g (送料無料),送料無料 12個セット オードパルファム クイーンオブビューティー 香水 芳香水,大正製薬 コパトーン アロマエッセンス UVスプレー レモンユーカリの香り 50g,ビセプター エッセンス E-03 255mL,バスクリン ゆずの香り ライトグリーンのお湯(透明タイプ) 業務用 10kg缶,【×6個】ナンバースリー 003 イルガ 薬用トリートメント S 500g 詰替え用,【送料無料】ヒカリシザー 光 シーエボレフティ762 6.0インチ【RCP】,★最大1,800円OFFクーポン配布中★【限定特典・除菌ジェル付】シュワルツコフ BC オイルローズ ローズオイル シャンプー 750mL + 1000mL + トリートメント750g + 1000g 詰め替え セット / 【送料無料】 1L 1kg schwarzkopf シュワルツコフ おすすめ品,【月間優良ショップ受賞】Diptyque Eau Lente Eau De Toilette Spray ディプティック オーラント EDTスプレー 100ml/3.4oz 【海外直送】,【SUQQU スック】マルチ グロウ スティック 102(シャイニーゴールド),Jean モンテカルロ 4点セット,ドクターシーラボ 薬用アクアコラーゲンゲル スーパーモイスチャーEX 200g オールインワン ポイント消化,タマリス フィトリーク モイスト 97ml 【6本セット】 【送料無料】,【Dr.Vranjes ドットール ヴラニエス/パッケージ不良】 ディフューザー スタンダードセレクション 500ml レフィル MELOGRANO <ザクロ> スティック付 ルームフレグランス,クリスチャン ディオール Christian Dior ジャドア イン ジョイ オー デ トイレット スプレー 75ml/2.5oz【海外直送】,【】【SUQQU スック】コンフォート リップ フルイド フォグ 02 舞紅 -MAIBENI,CHANELシャネルN°5 ロー ハンド クリーム 50mL,【正規品・送料込】クリニーク アクネ クレンジング ジェル<医薬部外品>(125ml),【店内全品送料無料】ヘレナルビンスタイン HELENA RUBINSTAIN プロディジーCELグロウローズUVベース SPF50/PA++++30mL【150g】,基礎化粧3点 セット洗顔料 化粧水 モイスチャーライザー 保湿 オーガニックコスメ オーガニック 基礎化粧品 天然成分 合成香料 パラベン シリコン 不使用KORA Organics ミランダ カー,コーセー 雪肌精 エンリッチ 「SAVE the BLUE」デザインボトル(しっとりタイプ) 500ml,【公式】イニスフリー Luckybag 2021 Premium ラッキーバッグ プレミアム 福袋 innisfree 韓国コスメ 国内発送 ギフト プレゼント 女性 誕生日 母の日 敬老の日 正規品 コスメ,TOCCA トラベルフレグランススプレー マヤの香り 20mL(香水・オークモスのフローラルウッディの香り),ラブクロム ナミ LOVE CHROME NAMI (PGブラック),★純正品/送料無料★ゲラン エクラン スルスィル ユニヴェルセル,ウィッグ ミディアム 人毛ミックス 自然 医療用フルウィッグhm2323,modish モディッシュラ ファム デリケートクリーム 110g 2個セットモディッシュ ラ ファム デリケート クリーム 110 g 2個セットエステサロン美容室 用品,【送料込・まとめ買い×48個セット】明色化粧品 リペア&バランス スキンケア UVベース 40g 1個,【正規品・送料込】ゲラン ルージュ ジェ リフィル 02(3.5g),マック パウダー キス リキッド リップカラー マラケシュ ミア,【バスクリン】モウガ 漲(ミナギ) 120ml 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