シャトーレオヴィルラスカーズ750ml

連載

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


マカデミアナッツオイル 1000ml 1L マカデミアナッツ油 マカダミアナッツオイル 業務用キャリアオイル アロマテラピー ベースオイル 植物性オイル マッサージオイル エステ

xrK2nVVecW

マカデミアナッツオイル 1000ml 1L マカデミアナッツ油 マカダミアナッツオイル 業務用キャリアオイル アロマテラピー ベースオイル 植物性オイル マッサージオイル エステ

マカデミアナッツオイル 1000ml 1L マカデミアナッツ油 マカダミアナッツオイル 業務用キャリアオイル アロマテラピー ベースオイル 植物性オイル マッサージオイル エステ:ハーブティー&アロマ専門店ユーン
マカデミアの種子からとれるオイル。酸化しにくいため、調理用としても利用されます。肌に浸透しやすく、柔らかくするのに役立ちます。
業務用サロン向け大容量 香粧品グレードのマッサージ用キャリアオイル
オイルマッサージに必ず必要なキャリアオイル(ベースオイル)。このマッサージ用キャリアオイルは、お肌に使える香粧品グレードの美容オイルです。
添加物は一切無い植物由来100%、純粋なピュア植物オイルですので安心してご使用になれます。ポンプ式容器でお届けしますので、そのままご利用いただけます。
(4000ml タイプは詰め替え用ノズルをお付けします。)

[使い方]
手のひらに適量(1円玉程度)とり、お顔や身体の素肌にそのまま押し込むようになじませて下さい。
乾燥や、カサカサ、パリパリが気になりだしたら...
夜の寝る前スキンケアにオススメです。

原産国:アメリカ
【2020年11月16日限定発売】KOSE コーセー INFINITY インフィニティ インテンシブ リンクル セラム キット【薬用シワ改善美容液】【医薬部外品】【日本正規品】,【300円クーポン | Fashion THE SALE】送料無料 ヴェレダ ホワイトバーチ ボディシェイプオイル お得な6個セット 200ml x 6 【仕入れ】 | WELEDA ボディオイル,送料無料 ランプベルジェ アロマランプ 3449 ブラック シグネチャーランプ 陶器ランプ あす楽 対応,「IPL技術&99万発照射」脱毛器 光脱毛器 IPL脱毛器 家庭用脱毛器 フラッシュ VIO脱毛 99万発照射 レディース メンズ vio 自動照射 ムダ毛処理 5段階レベル レーザー脱毛 クール機能 美容器 冷却ケア 冷感脱毛器 全身脱毛 男女兼用 おすすめ,アレス 人毛100% シールエクステ [ 4 ダークブラウン ] 20枚入り(20cm) 通販 1/4更新♪,【お買い得3個セット】エリクシール エンリッチド ローション CB 170mL FED ONLINE,アルビオンフローラドリップ 160ml(北海道と沖縄県は送料900円税込),シャナーズアーユルヴェーダ シャーハーブ,フルセットメイクを助ける5本のブラシ ケース付きグレイスセット,コーセー コスメデコルテ AQ ミリオリティ インテンシブ アイ クリーム 20ml (アイクリーム)【COSME DECORTE コスメ デコルテ KOSE】,プレミアム コパイバマリマリ 20ml(フェイスオイル ボディオイル 無添加 アマゾン 樹液),送料無料 オブコスメティックス 薬用トリートメントオブヘア・2-RO スキャルプ ローズブーケの香り 1000g リフィル オブ・コスメティックス 美容室専売 おすすめ 美容師 サロン専売,クラリーセージ 精油 50ml 生活の木 エッセンシャルオイル,73スタイル G30 総手植え,【”店内全品10倍” 1月9日(土) 20:00~1月16日(土) 01:59】ヘアカラートルネード プラス/ヘアケア サロン専売 美容室専売 美容院 カラー剤 ヘアカラーグッズ ヘアカラー,エグランティエ リッシュエッセンス 60ml 業務用 3個セット サロン専売 化粧品 EGLANTIER(エグランティエ)リッシュシリーズ 美容・コスメ・香水・スキンケア・美容液,【正規品・送料込】マリコール クレーム マルチ アぺザン(50ml),新品 新品 Dr.Caviet Ghost Plus ドクターキャビエット ゴースト プラス ボディ トリートメント 美容 K2126631,ロレアル セリエ エクスパート アブソルートリペア ゴールド シャンプー 300mL 6点セット|LOREAL アブソルートR|,【送料無料】【LAURA MERCIER ローラ メルシエ】シルククリーム ファンデーション オイルフリー 01 ROSE IVORY,送料無料!テラローラーISO シャインピンク,高橋ミカ開発 冬季限定保湿3点セット 20%OFF 送料無料 ニューピュアフコイダン高濃度原液 美容液&クリーム エムズコスメ ミッシーリスト,スペシャル集中ケアセットエイジングケアセット割キャンペーン,ホワイトグレイス プラチナムスノーホワイトニングエッセンス ×お得2本 《50ml、医薬部外品、WHITEGRACE、トリプル薬用処方、トラネキサム酸、美白、シミ、シワ》【送料無料】,【特価品】 ドクターシーラボ リフトアップマッサージャー,【当店は3980円以上で送料無料】テラの輝きモイスチャークリーム400g+ポンプ容器 5個セット,★純正品/送料無料★ドルチェ&ガッバーナ シャイニッシモ ハイシャインリップラッカー #320 Iconic Dahlia (4.5mL),【×3個】ルベル イオ クレンジング フレッシュメント (シャンプー) 2500mL 詰替え用,カリス成城 ベイ リーフ/ローレル オーガニック オイル 50ml [エッセンシャルオイル] EO,【×6個】ニューウェイ ジャパン ナノアミノ トリートメント RM-RO ローズシャボン 250g,【送料込・まとめ買い×48個セット】熊野油脂 ファーマアクト クール洗顔フォーム 130g しっとりスベスベの肌に導きます。(4513574019737)1ケース販売,ハリケーンティーライト no.25 / スモークグレー×ゴールド (Ro collection / ロー・コレクション) 【送料無料】,【送料無料・まとめ買い×10個セット】pdc ダイレクトホワイトdeW 薬用 美白クリーム 25g,【海外限定】正規品【Alexandre J】The Collector Zafeer Oud Vanille EDP 100ml FOR WOMEN【アレクサンダーJ】ザ・コレクター ザフィー ウード バニール オードパルファム 100ml【香水・フレグランス:フルボトル:レディース・女性用】,最大33倍CRE+ ミネラルKSイオンゲル 50g 5個セット ワールドレップサービス ゲル ジェル 送料無料,Yves-Saint Laurent イブサンローラン ラコレクション イブレス オーデトワレ スプレー La Collection Yvresse EDT 80ml spray,デオドラントクリーム ラヴィリン フォー フット 3個セット 「送料無料」 医薬部外品 デオドラントクリーム足用 持続力で選ぶならラヴィリン 足の臭いを元からシャットアウト アルコール、アルミニウム塩フリー お風呂に入っても効果が持続,【ふるさと納税】青森県鰺ヶ沢町 世界自然遺産白神山地から生まれた芳香スプレー 「杉」 50ml 癒し リラクゼーション リラックス リフレッシュ ルームスプレー アロマ 送料無料,送料無料 SpaLuce スパルーチェ フットケアローション 800ml 足 かかと 角質ケア ガサガサ ひびわれ ピーリング ホームケア 保湿成分,【5%OFFクーポン配布中 1/16 1:59まで】 【宅配便 送料無料】 2個セット シック S2(5個入×24)2枚刃 替刃,【当店は4980円以上で送料無料】モンゴ流リペアコンディショナーキオティル 400ml 2個セット,新品新品 DrCaviet Ghost Plus ドクターキャビエット ゴースト プラス ボディ トリートメント 美容K2126631,【送料無料】導入美容原液 DJ-LABO HSP 100mL,Aランク【Lumiere ルミエール】 HyPER シザー ハサミ鋏 はさみ 美容師・理容師 6.8インチ 右利き :H-459,【セルジュ ルタンス】 フェミニテデュボワ オーデパルファム・スプレータイプ 50ml 【香水・フレグランス:フルボトル:レディース・女性用】【バースデー 記念日 ギフト 贈物 お勧め 通販】,BCランク【刀水 TOUSUI】CH-550 シザー ハサミ 鋏 はさみ 美容師 理容師 【期間限定 送料無料!!】F-354,■5個セット■サンコール キートス ヘアモイストバター 《0》 205g /Kiitos/SUNCALL/美容室 サロン専売品 美容院 ヘアケア おすすめ品,【10個セット】 P&G パンテーン ミラクルズ カラーシャイン シャンプー ポンプ 480ml×10個セット 【正規品】,【美容オイルプレゼント】【あす楽】 【 限定セット 】 ジルスチュアート デスティニー クローゼット コレクション ( JILL STUART メイクアップコレクション クリスマスコフレ 2015年 限定 セット ポーチ付 )『5』【 送料無料 】※北海道・沖縄除く,1/10は最大8倍!カード&エントリー要♪ランコム アプソリュ プレシャスセル ホワイトオーラ ローション 150ml(3614270870477),【正規品・送料込】ボビイブラウン ロングウェア ブロー ジェル ブロンド,ドットールヴラニエス Dr VRANJES ディフューザー ARANCIOUVA ROSSAリフィル スティック付き500mL,【4000円offクーポン(要獲得) 1/28 9:59まで】 【送料無料】 ベルベット ローズ (テスター) EDP・SP 50ml 【ドルチェ&ガッバーナ】【香水 フレグランス】【レディース・女性用】【ドルチェ&ガッバーナ 】【DOLCE&GABBANA VELVET ROSE EAU DE PARFUM SPRAY TESTER】,ロクシタン ピオニーフェアリーハンドクリーム 30ml×10個セット【あす楽対応】【ネコポス不可】,【正規品・送料込】ボビイブラウン ロングウェア ブロー ジェル トープ,ゲラン ルージュ ジェリフィル 219,【24個セット】 P&G h&sformenスカルプEX コンディショナー ボトル200G エイチアンドエス エッチアンドエス h&s【送料無料】,ポイント10倍★9-11日20時~4H限定!【セット】ヘレナルビンスタイン HELENA RUBINSTEIN フェイスケア セット

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