連載改訂版 C#入門第3章 クラスとインスタンス |
![]() |
ここで説明することは内容的にやや高度なので、後で読んでもらってもかまわない。
メソッドなどを宣言する際に、publicやprivateといったアクセス範囲を指定するキーワードを付けることができるが、これと同じ仲間に、internalとprotectedというキーワードがある。internalは、そのプログラムの内部からのみ参照できることを指定するキーワードである。クラス・ライブラリなどを作成する場合は、クラス・ライブラリ自身を含むDLL(Dynamic Link Library。通常は拡張子.DLLのファイル)と、それを呼び出す実行ファイル(通常は拡張子.EXEのファイル)を作成することになるが、クラス・ライブラリ内部でinternalキーワードを付けたメソッドは、クラス・ライブラリ内部からは呼び出せるが、実行ファイルからは呼び出せないことになる。protectedは、継承したクラスから呼び出すことを許すが、それ以外のクラスからは呼び出せないことを指定する。両者は同時に指定することができるが、その際は、同じプログラム内と継承されたクラス内から呼び出し可能という意味になる。以下は実際に使用してみた例である。最初はクラス・ライブラリの例である。
1: using System; |
以下はクラス・ライブラリを呼び出す実行ファイルの例である。
1: using System; |
このソースをビルドすると、11行目で「'Sample003DLL.Class2.sample1()' はアクセスできない保護レベルになっています。」というエラーになる。まったく同じ記述がクラス・ライブラリ内にあるが、これはエラーになっていない。この差がinternalキーワードの効力である。
それに対して、実行ファイル内のクラスであっても、クラス・ライブラリ内のクラスを継承していれば、protectedなメソッドを呼び出すことができる。「protected internal」なメソッドは2つの条件のうちどちらか一方が満たされればアクセス可能である。この場合、internalの条件は満たさないが、protectedの条件は満たすので、呼び出し可能である。
C#の世界には、クラス(Class)のほかにもコンポーネント(Component)、コントロール(Control )という言葉がある。それぞれ、プログラムを構成する部品としての役割を持つものだが、意味が少し異なる。これらは、どういう意味の違いを持っているのだろうか? なお、ここでは後述の章で解説する用語も使用しているので、先を一読後に読まれるとよいだろう。
C#において、クラスは、いうまでもなくclassキーワードで宣言するものである。これに関しては迷うことはないだろう。では、コンポーネントとは何を意味する言葉だろうか? 一般用語としては、再利用され、ほかのオブジェクトとインタラクトするオブジェクトということになるが、C#では(より正確には.NET Frameworkでは)、System.ComponentModel.IComponentインターフェースを直接または間接的に実装したクラスということになる。このインターフェースは、サイトに関する機能を実装するために使用される。サイトとは、コンポーネントと、その入れ物となるコンテナの関係を表現するために使用される機能である。コンテナはSystem.ComponentModel.IContainerインターフェースを実装したクラス、サイトはSystem.ComponentModel.ISiteインターフェースを実装したクラスとなる。
では、Visual Basicプログラマーならおなじみのコントロールはどのような意味を持っているのだろうか? 言葉の意味としては、ユーザーインターフェースを持ったコンポーネントがコントロールということになる。.NET Frameworkには、2種類のコントロールが存在する。1つは、クライアント側のWindows Formsで使用されるもので、System.Windows.Forms.Controlを直接または間接的に継承したクラスがこれにあたる。もう1つは、サーバー側のASP.NETで使用されるもので、System.Web.UI.Controlを直接または間接的に継承したクラスがこれにあたる。すべてのコントロールはコンポーネントでもあるが、すべてのコンポーネントがコントロールというわけではない。
このようにクラス、コンポーネント、コントロールは、それぞれ異なる役割を与えられた有益なものである。うまく使いこなして、効率よくプログラムを作成しよう。![]()
『新プログラミング環境 C#がわかる+使える』本記事は、(株)技術評論社が発行する書籍『新プログラミング環境 C#がわかる+使える』から許可を得て一部分を転載したものです。 【本連載と書籍の関係について 】 この書籍は、本フォーラムで連載した「C#入門」を大幅に加筆修正し、発行されたものです。連載時はベータ版のVS.NETをベースとしていましたが、書籍ではVS.NET製品版を使ってプログラムの検証などが実施されています。技術評論社、および著者である川俣晶氏のご好意により、書籍の内容を本フォーラムの連載記事として掲載させていただけることになりました。 →技術評論社の解説ページ ご注文はこちらから |
| INDEX | ||
| 改訂版 C#入門 | ||
| 第3章 クラスとインスタンス | ||
| 3-1 オブジェクト指向の必要性 | ||
| 3-3 staticの効力 | ||
| Column 高度なアクセス制御 | ||
| 「連載:改訂版 C#入門」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



