サントリーSuntory グリーティング 720ml 箱付

連載

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


水溶性マッサージオイル 20L│日本製 国産 無香料 無着色 コラーゲン配合 5000円以上

nAoQJMTbix

水溶性マッサージオイル【コラーゲン】20L│日本製 国産 無香料 無着色 コラーゲン配合 5000円以上

水溶性マッサージオイル【コラーゲン】20L│日本製 国産 無香料 無着色 コラーゲン配合 5000円以上:トイズファン



,5000円以上お買い上げで!(沖縄・離島除く)

拭き取り簡単!コラーゲン配合の水溶性マッサージオイル!

水溶性コラーゲン配合で、お肌を健やかに保ちます。
安心・安全の日本製。化粧品基準の原料のみを使用しています。

主成分にグリセリンを使用した、ウォーターベースのオイルです。
オイルフリー(オイル成分が入っていません!)

水溶性オイルは、後始末がとても簡単!
水が加わると、溶けて化粧水のようになります。

この水溶性マッサージオイルは、水溶性コラーゲン配合しています。
水溶性コラーゲンで、肌にハリ、弾力、潤いを与えます。
水溶性コラーゲンは、浸透性も高いので使用後はもっちりとした肌を保ちます。
肌に馴染みやすくサラッとした使い心地。
また、じんわりと温かさも感じながらマッサージができます。

水溶性なので、ホットタオルで簡単に拭き取り可能!
掃除、洗濯も水洗いだけで簡単にできます。

無着色・無香料タイプなので香りに敏感な方にお勧めです。
オイルマッサージをもっと手軽に。
水に溶ける水溶性オイルは、
大変だった後始末の作業もなくなります!

■水溶性オイルのメリット
1.施術箇所やベッドについたオイル跡が簡単に拭き取れます
2.拭き取り後、ベタつかない
3.タオルや衣類などの洗濯が楽になります
4.ボディトリートメントはしっとりなめらか
5.天然の植物油に比べて安価

■水溶性オイルのデメリット
1.水溶性オイルに含むグリセリンは、水より重いので持ち運びは大変です
2.グリセリンがお肌に合わない可能性があります
※お肌に合わない場合はご使用をおやめください

小分けに便利なコック付属。
小分け用の容器に移し替えれば持ち運びにも便利です。

【注意事項】※コックについて
コックは小分け用です。(保管用ではありません)
液漏れの原因となりますので使用時以外はコックをキャップに付け替え、上向きで保管して下さい。


【注意事項】※20Lの商品をお買い上げの方へ
この商品は大型のため、商品の箱に直接配送伝票を貼った状態で出荷させて頂く場合がございます。
配達中の衝撃で商品の箱に傷や汚れが付く場合がございますが、返品・交換はできませんので予めご了承ください。
商品スペック
  • 内容量:20L
  • タイプ:水溶性マッサージオイル/無香 ※ロットにより、原料自体の臭い(原料臭)を感じることがあります
  • 付属品:便利なコック付属
  • 主成分:グリセリン
【ジャン ポール ゴルチェ】 ル・ボ― オーデトワレ・スプレータイプ 125ml 【香水・フレグランス:フルボトル:メンズ・男性用】【ル・ボー】【JEAN PAUL GAULTIER LE BEAU EAU DE TOILETTE SPRAY】,キューサイ リバイタライジング濃密ジェル 50g 6個まとめ買い,♪BC #詰め替え用 1L【oggi otto】オッジィオットブラッディーコンプレックス #詰め替え用 1L(1000ml)<ヘアケア・トリートメント><ケラチン><レフィル・リフィル・業務用>,サンタマリアノヴェッラ ルームアロマ タボレッタラベンダー,【セルジュ ルタンス】 フルールドゥシトロニエ (旧) オーデパルファム・スプレータイプ 50ml 【香水・フレグランス:フルボトル:レディース・女性用】【SERGE LUTENS FLEURS DE CITRONNIER EAU DE PARFUM SPRAY】,マキアージュ【未開封】ドラマティックスキンセンサーベース EX 化粧下地 化粧品 コスメ SPF25 PA+++ 6本セット【かんてい局亀有店】,デュフラフィトフォース ブライトCジェルパック【業務用】8g×30包入DIEUFRA(デュフラフィトフォース)美容 コスメ 化粧品 コスメチック コスメティック,薬用育毛剤と黒麗シャンプー基本セット 【送料無料】[日興ビューティー 理学美容研究会],【正規品・送料込】ドゥラメール ザ・ルミナス クッションファンデーション 11ロージーアイボリー(レフィル12g×2&ケース×1),【正規品・送料込】ローラメルシエ ルージュ エッセンシャル シルキー クリーム リップスティック 30 ローズルージュ(3.5g),【ポイント10倍&10%OFFクーポン使用可 1/1~】幹細胞 高濃度 30% 配合 美容液 エッセンス プレミアム クリア セラム ヒトユライ HITOYURAI+30 Premium Clear Serum 化粧水 ローション 美容液 乳液 クリーム マスク 日焼け止め UV,【送料無料】ドゥ・ラ・メール ザ・ソフト モイスチャー パウダー ファンデーション <SPF30>【ドゥラメール ラメール】(ファンデーション下地 ハイライター)(ギフト),ナーズ ベルベットグロスリップペンシル 9104,【正規品・送料込】ランコム ラプソリュ ラッカー 312ファースト デート(8mL),アスタリフト ジェリー アクアリスタ 40g (本体付) / ジェリー状“先行”美容液 ASTALIFT 富士フィルム フジフィルム,【メーカー公式店】クレシェ ブライトニングフォースWH 30mL<ホワイトニング美容液>,【36個セット】【1ケース分】馬油 スキンクリーム 280g ×36個セット【正規品】,【送料無料】【NARS ナーズ】ハイライティングパウダー 5220 クラッシュドピンクパール,アルビオン エクシア AL ホワイトニング エターナル ステム ノーヴァ クリーム (薬用美白クリーム) 30g 【宅配便B発送】,キアラーレ DO-S トリートメントSP 1L,【メーカー公式】キーエボシャンプー & トリートメント【送料無料】(エイジングケア トリートメント 髪のパサつき シャンプー セット),フィトメール アルゲジャム 2000ml【業務用】 PHYTOMER(フィトメール) 美容 サロン 専売 コスメ 化粧品 コスメチック コスメティック,シャネル ボディエクセレンス モイスチャーミルク 200ml CHANE BODY EXCELLENCE LAIT HAUTE HYDRATATION,イソップ(Aesop) レジュビネイト ボディバーム 500ml [並行輸入品],★送料無料 おまけ付き♪ スネイル エッセンシャル EX リンクル ソリューション スキンケア 3種セット SNAIL ESSENTIAL EX Wrinkle Solution Skin Care 韓国コスメ ザセム thesaem 韓国コスメ,1/10は最大8倍!カード&エントリー要♪ポーラ B.A セラム レブアップ 40ml(4953923304020),【送料無料】THROW スロウ シャンプー 600ml&トリートメント 570g セット《モイスト》【ビューティーエクスペリエンス】シャンプー トリートメント 艶 べたつかない ダメージケア カラーキープ サロン専売 ヘアケア 潤う,YS.P ロールブラシ YS-105EL3,【限定】【DIPTYQUE ディプティック】キャンドル トウキョウ 190G,韓国コスメ Re Gen ISC マスクパック スキンリフレッシュ 5枚セット【リジェン】【SR】【毛穴ケア】【シートマスク】【オルチャン】【帝美 TEIBI】【メール便 送料無料】【正規品】【クリスマス】【パーティー】,【お得な6本セット】ALOINS ロカイレイ スキンコンディショナー ディープモイスト 200ml,BEAUTY NAILERスーペリアUVランプ 36W,送料無料 2本セット★Fエイド プリフィカ シャンプー レフィル 800ml/トリートメント ディープモイスト レフィル 800g フィヨーレ サロン・美容室専売品【フィヨーレ FIOLE Purifica】,アンプルール ラグジュアリーホワイト WプロテクトUVプラス SPF50 PA 30g 日焼け止め UV美容液,【5個セット】 スーパーミリオンヘアー ライトブラウン トライアルセット 10g+60mL×5個セット 【正規品】,H&2D キング&クィーンジェル50箱セット 女性用,SAランク 美品KS29 セニング すき鋏28目 美容師 理容師 F994,【10個セット】ピュアナチュラル エッセンスローション UV 大容量つめかえ用 390ml×10個セット【正規品】,ALBION|アルビオン EXCIA エクシア AL ローズスキン イリュージョン SPF25 PA++,【ポイント16倍以上 9日20:00~16日01:59 エントリー必須】焼香 お焼香 十種香 伽羅香 125g 紙箱入 玉初堂 日本製 しょうこう きゃらこう 高級 沈香 伽羅 香木 線香 お香 ご焼香 寺院 お寺 仏壇 法要 寺 送料無料,【正規品・送料込】ジバンシイ ルージュ・ジバンシイ・シアー 304モカ・ブラウン(2.2g),【送料込・まとめ買い×24個セット】花王 8x4 エイトフォー ボディフレッシュ ウォータージェル クール フレッシュソープ 140g,ディオール Diorミス ディオール アブソリュ―トリー ブルーミング 50ml香水 レディース,クリスチャン  Christian Louboutin ルブタン 香水  クリスマス ルビワールド フレグランス コレクション,ディプティック テュベルーズ(月下香) キャンドル 190g DIPTYQUE TUBEREUSE CANDLE[0536],キールズ KIEHL'S DSマイクロピールコンセントレート 30ml[ 美容液 ],【×12個】ロート製薬 SUGAO スガオ スノーホイップクリーム ピンクホワイト 25g,<セット>資生堂 ザヘアケア アクアインテンシブ シャンプー 1000ml & トリートメント 1 1000g ポンプ ボトル /AQUA INTENSIVE/SHISEIDO/美容室 サロン専売品 美容院 ヘアケア おすすめ品,《クーポン配布中》 3特典【送料無料+お米+ポイント】 【2個セット】 ミョウバン配合 デオラボクリーム チューブタイプ ミョウバンクリーム 明礬クリーム 気になるニオイに! ミョウバン クリーム デオドラントクリーム デオラボチューブ デオラボ,OSMO カラーサイコ ワイルドティール 150mL,【 お得な 2本セット 】 ヴァレデローズ プレミアムローズウォーター (500mL) PREMIUM ROSE WATER ローズウォーター,正規品【RALPH LAUREN】Ralph Lauren Blue EDT 75ml WOMEN'S【ラルフローレン】ラルフローレン ブル― オードトワレスプレータイプ 75ml [香水・フレグランス:フルボトル:レディース・女性用] POLO香水,ジョーマローン 限定セット JO MALONE 送別会 お礼 ギフト 母の日  ギフト プレゼントに 祝い オスマンタス &イングリッシュペア,フィトメール ブーショッファン2kg 業務用 2個セット美容 コスメ 化粧品 コスメチック コスメティック,【5個セット】 ニュートロジーナ ノルウェーフォーミュラ インテンスリペア オイル 200mL×5個セット 【正規品】【mor】【ご注文後発送までに1週間前後頂戴する場合がございます】,PAUL SCERRI ポールシェリー P-products スパ アロマティック リラクシングオイル 200ml【2個セット】【送料無料】,正規品Black Opium EDP SP 50ml WOMENSブラック オピウム OP オードパルファム 50ml,【クリスチャン ディオール】 カプチュール トータル セル ENGY スーパ― セラム 75ml 【化粧品・コスメ:スキンケア:美容液・ジェル】【カプチュール トータル セル】

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