どうも、Interfaceが今一つ自分のものになっていない実感があり、ここ2・3日のあいだ、インターフェースと格闘しています。
現段階では自由に使いまわせる程の理解ができておらず、正直に申し上げると何に対して疑問を持っているのかすら分析できていません。
なんか嫌な感じなので、これを機に復習してみた事をエントリにしてみようと思います。
まずは、インターフェースに関する特徴をMSDNのドキュメントを利用して整理してみます。
インターフェースの特徴
- インターフェースは定義できるが実装は出来ない。インターフェースにて定義した内容はクラスにて実装を行う。
- インターフェースはクラスと同様にプロパティ、メソッド、イベントを定義できる。
- インターフェースを実装するクラスは継承元となるインターフェースのすべての機能を厳密に実装する必要がある。
- クラスはインターフェースの拡張機能や機能追加としての実装が可能である。
- しかし、インターフェースの実装は拡張できるが、公開したインターフェースに対する変更は出来ない。(これはインターフェースによる定義の変更に伴う、厳密な定義の実装が担保できない事に由来するようだ。)
インターフェースの利用
インターフェースでできることInterfaceの構文を利用する事で以下のメンバが定義できる。
- インターフェースはInheritsキーワードを用いた継承が可能。
(この場合、必ず派生元の名称の指定が必要となる。)
- Propertyプロシージャの定義ができる。
- Functionプロシージャが定義できる。
- Subプロシージャが定義できる。
- Eventプロシージャが定義できる。
- インターフェースの中で、入れ子になったインターフェースを定義できる。
- インターフェースのメンバであるクラスが定義できる。
- インターフェースのメンバとしての構造体が定義できる。
大体こんな感じの様です。
サンプルの作成
次に理解を深める第一歩として基本とも言えるサンプルを作成してみました。
サンプル作製の手順
- コンソールアプリケーションを用いた新規プロジェクトを作成。
- プロジェクト名を VB.Interface.Sample01とする。
- IDEのプロパティウインドウ、ファイル名をModule1.vbからProgram.vbに変更
Module Module1
Sub Main()
End Sub
End Module
を消す。
- 以下のプログラムコードを打ち込見ます。
Imports System
Public Class Program
Public Shared Sub Main()
Dim Hero As Character = New Character
Hero.Name = "ぽぴ王子"
Hero.Attack()
End Sub
End Class
Interface Fighter
Property Name() As String
Sub Attack()
End Interface
Public Class Character
Implements Fighter
Private mName As String
Public Sub Attack() Implements Fighter.Attack
Console.WriteLine("{0}の攻撃: 10のダメージを与えた。", Name)
End Sub
Public Property Name() As String Implements Fighter.Name
Get
Return mName
End Get
Set(ByVal value As String)
mName = value
End Set
End Property
End Class
- メニューバーのプロジェクトをクリックし、プロジェクトのプロパティをクリックしてスタートアップオブジェクトをSub Mainに変更する。
- メニューバーのデバッグをクリックして[デバッグなして実行]を選択して動作を確認してみます。
特にここまでは苦もなく打ち込めるのですが、打てるだけでこれで良いのか分かりません。
ですが、エントリにしてみると、分からない事が少し見えてきました。
疑問として見えてきた事とは、
果たして、インターフェースによる定義を利用するサンプルとして
このサンプルは適当なのでしょうか?
そして、
インターフェースを利用する場面とはどんな場面なのでしょうか?
疑問を残しつつも、エントリは次回につづきます。