「インタフェース」の版間の差分

提供: AB開発Wiki
ナビゲーションに移動検索に移動
 
117行目: 117行目:
 
  Dim ifoo = foo As IFoo
 
  Dim ifoo = foo As IFoo
 
  ifoo.Task()
 
  ifoo.Task()
 +
 +
=== 同一メソッドを持つ複数のインターフェイスを実装する ===
 +
Interface IFoo
 +
    Sub Task()
 +
End Interface
 +
 +
Interface IBar
 +
    Sub Task()
 +
End Interface
 +
 +
Class Foo
 +
    Implements IFoo, IBar
 +
Public
 +
    Sub IFoo.Task()
 +
        System.Diagnostics.Trace.WriteLine( "Called [Foo.Task(for IFoo)]" )
 +
    End Sub
 +
    Sub IBar.Task()
 +
        System.Diagnostics.Trace.WriteLine( "Called [Foo.Task(for IBar)]" )
 +
    End Sub
 +
End Class
 +
 +
Dim foo = New Foo
 +
 +
Dim ifoo = foo As IFoo
 +
ifoo.Task()
 +
 +
Dim ibar = foo As IBar
 +
ibar.Task()
  
 
==COMインターフェイス==
 
==COMインターフェイス==

2007年10月21日 (日) 06:41時点における最新版

インタフェースとは、クラスが提供するメソッドをあらかじめ定義した関数リストのことを言います。

インタフェースはそれ単体ではインスタンス化することはできません。インスタンス化するには、派生先のクラスですべてのメソッドを実装する必要があります。

インターフェイスの派生元はインターフェイスに限られ、クラスから派生することはできません。

一つのクラスは複数のインターフェイスを実装することができます。

インターフェイスの定義

Interface Name
    [Inherits BaseInterface]
    Members
End Interface

項目

Name
インタフェースの名前を指定します。
BaseInterface
継承するインタフェースが存在する場合に指定します。カンマ "," で区切って複数のインタフェースを多重に継承することができます(インタフェースの多重継承は未実装)。
Members
インタフェースが保有するメソッドを定義します。SubまたはFunctionステートメントを利用して一般のメソッドを定義するように指定します。インタフェースのメソッド定義では実装コード及び "End Sub" または "End Function" の記述は不要です。

使用方法

インターフェイスを実装してみる

Interface IFoo
    Sub Task()
End Interface

Class Foo
    Implements IFoo
Public
    Sub Task()
        System.Diagnostics.Trace.WriteLine( "Called [Foo.Task]" )
    End Sub
End Class

Dim foo = New Foo
foo.Task()

Dim ifoo = foo As IFoo
ifoo.Task()

複数のインターフェイスを実装する

Interface IFoo
    Sub Task1()
End Interface

Interface IBar
    Sub Task2()
End Interface

Class Foo
    Implements IFoo, IBar
Public
    Sub Task1()
        System.Diagnostics.Trace.WriteLine( "Called [Foo.Task1]" )
    End Sub
    Sub Task2()
        System.Diagnostics.Trace.WriteLine( "Called [Foo.Task2]" )
    End Sub
End Class

Dim foo = New Foo

Dim ifoo = foo As IFoo
ifoo.Task1()

Dim ibar = foo As IBar
ibar.Task2()

インターフェイス実装時に基底クラスのメソッドを実装取り込みする

Interface IFoo
    Sub Task()
End Interface

Class FooBase
Public
    Sub Task()
        System.Diagnostics.Trace.WriteLine( "Called [Foo.Task]" )
    End Sub
End Class

Class Foo
    Inherits FooBase
    Implements IFoo
End Class

Dim foo = New Foo

Dim ifoo = foo As IFoo
ifoo.Task()

インターフェイスメソッドを派生クラスでオーバーライドする

Interface IFoo
    Sub Task()
End Interface

Class FooBase
Public
    Virtual Sub Task()
        System.Diagnostics.Trace.WriteLine( "Not called" )
    End Sub
End Class

Class Foo
    Inherits FooBase
    Implements IFoo
Public
    Override Sub Task()
        System.Diagnostics.Trace.WriteLine( "Called [Foo.Task]" )
    End Sub
End Class

Dim foo = New Foo

Dim ifoo = foo As IFoo
ifoo.Task()

同一メソッドを持つ複数のインターフェイスを実装する

Interface IFoo
    Sub Task()
End Interface

Interface IBar
    Sub Task()
End Interface

Class Foo
    Implements IFoo, IBar
Public
    Sub IFoo.Task()
        System.Diagnostics.Trace.WriteLine( "Called [Foo.Task(for IFoo)]" )
    End Sub
    Sub IBar.Task()
        System.Diagnostics.Trace.WriteLine( "Called [Foo.Task(for IBar)]" )
    End Sub
End Class

Dim foo = New Foo

Dim ifoo = foo As IFoo
ifoo.Task()

Dim ibar = foo As IBar
ibar.Task()

COMインターフェイス

※この項目の仕様は未定です。

IUnknownインタフースから派生したインターフェイスはCOMインタフェースとして利用できます。