「インタフェース」の版間の差分
提供: AB開発Wiki
ナビゲーションに移動検索に移動(2人の利用者による、間の3版が非表示) | |||
1行目: | 1行目: | ||
− | + | '''インタフェース'''とは、クラスが提供するメソッドをあらかじめ定義した関数リストのことを言います。 | |
− | + | インタフェースはそれ単体ではインスタンス化することはできません。インスタンス化するには、派生先のクラスですべてのメソッドを実装する必要があります。 | |
+ | |||
+ | インターフェイスの派生元はインターフェイスに限られ、クラスから派生することはできません。 | ||
+ | |||
+ | 一つのクラスは複数のインターフェイスを実装することができます。 | ||
== インターフェイスの定義 == | == インターフェイスの定義 == | ||
10行目: | 14行目: | ||
=== 項目 === | === 項目 === | ||
− | + | ;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インタフェースとして利用できます。 | |
− | + | ||
+ | [[Category:言語仕様|いんたふええす]] |
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インタフェースとして利用できます。