ヘッダー
Visual Basic サンプル集
VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

インターフェースの宣言

2021/4/18

→ C# のサンプルに切り替える

 

一般的なインターフェース

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

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

実装例

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

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

 

複数のインターフェースを実装するとメンバーの定義が重複してしまう場合があります。その場合、実装時にメンバーの名前を変更することで区別します。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

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

呼び出しは、実装時に定義した名前で呼び出すか、インターフェースを明示して呼び出すかします。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

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()

 

 

型パラメーターを持つインターフェース(ジェネリック)

VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Public Interface ISample(Of T)

    Property Value As T

    Sub Skip()

End Interface

メモ:VB2005以上でインターフェースに型パラメーターを指定できます。この例はさらに新しいプロパティの構文を使っているためVB2010以上でのみ使用できます。

実装例

VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

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

型パラメーターを解決しないで実装することもできます。

VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

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

 

 

インターフェースを継承するインターフェース

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Public Interface IHuman
    Inherits ISpeaker, IWalker

    Sub Think()
End Interface

Public Interface ISpeaker
    Sub Speak()
End Interface

Public Interface IWalker
    Sub Walk()
End Interface

実装例

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応
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

Interface ステートメント - Visual Basic | Microsoft Docs

Implements ステートメント - Visual Basic | Microsoft Docs

 


VB6対応 VB6では インターフェースだけを定義することはできませんが、Implementsキーワードを使ってクラスとして宣言されているインターフェースを実装することができます。