Visual Basic サンプル集 |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Visual Basic 中学校 > Visual Basic サンプル集 > Visual Basic サンプル集目次 >
インターフェースの宣言
2021/4/18
一般的なインターフェース
Public Interface ISample
Property Name As String '←この構文でプロパティを宣言できるのはVB2010以降
Sub DoSomething(value As String)
Function Add(x As Integer, y As Integer) As Integer
End Interface
実装例
Public Class ConcreteSample
Implements ISample
Public Property Name As String Implements ISample.Name '←この構文でプロパティを宣言できるのはVB2010以降
Public Sub DoSomething(value As String) Implements ISample.DoSomething
value = value.ToUpper
End Sub
Public Function Add(x As Integer, y As Integer) As Integer Implements ISample.Add
Return x + y
End Function
End Class
複数のインターフェースを実装するとメンバーの定義が重複してしまう場合があります。その場合、実装時にメンバーの名前を変更することで区別します。
Public Interface IComputer
Function GetName() As String
End Interface
Public Interface IUser
Function GetName() As String
End Interface
Public Class SystemOperator
Implements IComputer, IUser
Public Function GetComputerName() As String Implements IComputer.GetName
Return Environment.MachineName
End Function
Public Function GetUserName() As String Implements IUser.GetName
Return Environment.UserName
End Function
End Class
呼び出しは、実装時に定義した名前で呼び出すか、インターフェースを明示して呼び出すかします。
Dim op As New SystemOperator()
Dim name1 As String = op.GetComputerName()
Dim name2 As String = op.GetUserName()
Dim name3 As String = DirectCast(op, IComputer).GetName()
Dim name4 As String = DirectCast(op, IUser).GetName()
型パラメーターを持つインターフェース(ジェネリック)
Public Interface ISample(Of T)
Property Value As T
Sub Skip()
End Interface
メモ:VB2005以上でインターフェースに型パラメーターを指定できます。この例はさらに新しいプロパティの構文を使っているためVB2010以上でのみ使用できます。
実装例
Public Class ConcreteSample
Implements ISample(Of Date)
Public Property Value As Date Implements ISample(Of Date).Value
Public Sub Skip() Implements ISample(Of Date).Skip
Value = Value.AddDays(1)
End Sub
End Class
型パラメーターを解決しないで実装することもできます。
Public Class ConcreteSample(Of T)
Implements ISample(Of T)
Public Property Value As T Implements ISample(Of T).Value
Public Sub Skip() Implements ISample(Of T).Skip
'Do Something
End Sub
End Class
インターフェースを継承するインターフェース
Public Interface IHuman
Inherits ISpeaker, IWalker
Sub Think()
End Interface
Public Interface ISpeaker
Sub Speak()
End Interface
Public Interface IWalker
Sub Walk()
End Interface
実装例










Public Class Human
Implements IHuman
Public Sub Speak() Implements ISpeaker.Speak
'Do Something
End Sub
Public Sub Walk() Implements IWalker.Walk
'Do Something
End Sub
Public Sub Think() Implements IHuman.Think
'Do Something
End Sub
End Class
メモ:実装時に複数のインターフェースをImplementsすることもできます。
既定の実装を含むインターフェース
VBではインターフェースに既定の実装を含めることはできません。C# 8.0(2019年9月)以降は、インターフェースに既定の実装を含められます。
VBでこれに一番近い機能は拡張メソッドによるインターフェースの拡張です。
参考
インターフェイス - Visual Basic | Microsoft Docs
VB6では
インターフェースだけを定義することはできませんが、Implementsキーワードを使ってクラスとして宣言されているインターフェースを実装することができます。