- - PR -
VB.NETのインターフェイスについて
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-02-20 10:10
クラスでインターフェイスを実装する必要性がいまいち理解できません。
ヘルプによると 「インターフェイスは、クラスと同様にプロパティ、メソッド、およびイベントのセットを定義します。 ただし、クラスとは異なり、インターフェイスは実装を提供しません。インターフェイスはクラスによって実装され、クラスとは別のエンティティとして定義されます。」 と説明されていますが、クラスにプロパティやメソッドを持たせるのと何が違うのでしょうか? そもそも、インターフェイスどのような場合に威力を発揮するものなのでしょうか? よろしくお願いします。 | ||||
|
投稿日時: 2004-02-20 10:24
.NETフレームワークではクラスの多重継承ができない
仕様になっています。JAVAやObjective-Cもそうです。 C++では可能ですが、メンバ変数にからむ菱形多重継承の問題とかいろいろ ややこしいことになるらしいです。 というわけで、あるクラスに2つ以上の側面をもたせようと思った場合、 インターフェースという、実装/メンバ変数を持たない切り口を 与える必要があります。 インターフェースについては、下記の本をよむとわかりやすいですよ。 JAVAでかかれていますが考え方の問題なので.NETでも適用できます。 http://www.amazon.co.jp/exec/obidos/ASIN/4797316462/ref=sr_aps_b_/249-7395117-3224325 | ||||
|
投稿日時: 2004-02-20 10:52
これはそうなんですけど、ひょっとするとクラスの継承とかの概念からまず理解して、次になぜインターフェイスというものがあるのかと進んだ方がいいかもしれないですね(現状クラス、継承、多態などについて理解不足であれば)。 まあ、継承といっても、実装の継承で理解されると厳しいかもしれませんが… | ||||
|
投稿日時: 2004-02-20 11:05
たしかに。。 少しとばしすぎてるなぁ、と思って結城さんの本に デリゲートしていました。 とりあえずは、継承によるポリモーフィズムあたりから、、 http://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6tonet19/vb6tonet19_01.html | ||||
|
投稿日時: 2004-02-20 11:44
ナキヲさん、なちゃさんありがとうございます。
確かに継承についても、深く理解していませんでした。 僕の感覚では、継承は1つのクラスからしか各要素を定義できず、 インターフェイスを使うと一つのクラスから複数のインターフェイスを定義できるくらいに感じていました。 そこで一番素朴な疑問は、なぜインターフェイスには実装を提供せずにただのテンプレートなのかということです。例えば、下記のようなインターフェイスとそれを実装するクラスを作成してみたんですが この場合には、class3に単なるメソッドとしてoutputMSGを持たせても良いのではないかと思えてしまいます。 結局インターフェイスを実装するということは、各クラスでインターフェイスで定義された 名前を使いまわすということなのでしょうか? Public Interface interface1 Sub outputMSG(ByVal msg As String) End Interface Public Class class3 Implements interface1 Public Sub outputMSG(ByVal msg As String) Implements interface1.outputMSG Trace.WriteLine(msg) End Sub End Class ん〜、継承のように中身があるものを使いまわすなら、その意義も感じられるのですが。 インターフェイスのように実装先で処理内容を変更できる場合の有効性がいまいちです。 なんだか混乱してきました。 | ||||
|
投稿日時: 2004-02-20 11:58
NAL-6295です。
インターフェースは ・ポリモーフィズムの観点に置いて有用という事になります。 でも、これだけの利点だとクラス継承でも一緒だという事になります。 それでは、更に利点をプラスしてみましょう。 ・実装したクラスのある側面だけしか見なくてよくなる。もしくは、どの側面を見ているかが分かる。 例を上げると 演劇において、一人二役の登場人物が今どの役を演じているかがわかり、その役についてだけ注目すればいい。 って事です。 ま、つまり使う側から見ると、 ・そのクラスが複数の役を持っていたとしても、使用したい役についてしか見なくてすむ。 ・後からコードを見たときに、どの役を演じてもらっているかが分かる。 という利点も出てきますね。 | ||||
|
投稿日時: 2004-02-20 12:00
インタフェースは「継承」として考えるのではなく、「多態」として考えればいいかも。VB.NETではInherits、Implementsのように、使用するキーワードが違いますし。私もここに書くときは「クラスの継承」と「インタフェースの実装」というように、言葉を使い分けています。
> 僕の感覚では、継承は1つのクラスからしか各要素を定義できず、 > インターフェイスを使うと一つのクラスから複数の > インターフェイスを定義できるくらいに感じていました。 言葉が逆? <継承は1つのクラスからしかできないが、複数のインタフェースを実装できる> | ||||
|
投稿日時: 2004-02-20 12:10
あああ、私が先に書いた、 > まあ、継承といっても、実装の継承で理解されると厳しいかもしれませんが… って所ではまってる気がする… インターフェイスの継承(ここでいうインターフェイスとは、Javaや.NETにおけるインターフェイス機能のことではなく、一般的な意味合いです)というようなキーワードで理解する方が良いかもです…。 |
1|2|3
次のページへ»