Visual Basic 2012 Voorbeelden
   

visual basic 2012 broncode voorbeelden

Blijf op de hoogte van de recente aanpassingen op vbvoorbeelden!

Microsoft Visual Studio 2012Microsoft Developers Network - Visual BasicMicrosoft .NET Framework

23.2. System.IComparable(Of T)

Print Email Deel op Twitter Deel op Facebook

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.

23.2.1. IComparable Interface

Ook interfaces kunnen generiek worden opgesteld.

Onderstaande abstracte klasse Figure implementeert de interface IComparable om te garanderen dat we verschillende Figure objecten met elkaar kunnen vergelijken.

Deze interface vereist een implementatie voor de CompareTo(obj As Object) As Integer method.
Visual Basic 2012 Broncode - Codevoorbeeld 588
Option Strict On
Option Explicit On

Namespace Example1
    MustInherit Class Figure : Implements IComparable
        Public MustOverride Function GetArea() As Double
        Private Function CompareTo(ByVal obj As Object) As Integer _
                                         Implements System.IComparable.CompareTo
            If Not TypeOf obj Is Figure Then
                Throw New ArgumentException("An invalid argument was " & _
                          "specified.  An argument of type Figure is required.")
            Else
                CompareTo = CompareTo(DirectCast(obj, Figure))
            End If
        End Function
        Public Function CompareTo(ByVal other As Figure) As Integer
            If other IsNot Nothing Then
                CompareTo = 1
            Else
                CompareTo = Me.GetArea().CompareTo(other.GetArea())
            End If
        End Function
        Public Overrides Function ToString() As String
            ToString = GetArea.ToString()
        End Function
    End Class
End Namespace
In bovenstaande klasse Figure hebben we private implementation toegepast om te vermijden dat een niet typesafe method CompareTo(ByVal obj As Object) aan de publieke interface werd toegevoegd.  Een strongly typed variatie CompareTo(ByVal figure As Figure) werd dan wel opgenomen.

Concrete klassen Square en Circle worden van Figure afgeleid, en zijn hierdoor verplicht een implementatie te voorzien voor de Area property :
Visual Basic 2012 Broncode - Codevoorbeeld 589
Namespace Example1
    Class Square : Inherits Figure
        Public Property Side As Double
        Public Overrides Function GetArea() As Double
            GetArea = Side ^ 2
        End Function
    End Class
    Class Circle : Inherits Figure
        Public Property Radius As Double
        Public Overrides Function GetArea() As Double
            GetArea = Radius ^ 2 * System.Math.PI
        End Function
    End Class
End Namespace
Onderstaande client toont ons hoe de compiler ons verhindert concrete Figure objecten te gaan vergelijken met niet Figure objecten (1).
De publieke interface van Figure voorziet immers enkel in een CompareTo met een Figure argument, waardoor we dus enkel Figures onderling kunnen vergelijken.
Visual Basic 2012 Broncode - Codevoorbeeld 590
Namespace Example1
    Class Client
        Public Shared Sub Main()
            Dim figure1 As Figure = New Square With {.Side = 2}
            Dim figure2 As Figure = New Circle With {.Radius = 1}
            '
            Console.WriteLine(figure1.CompareTo(figure2))
            'Console.WriteLine(figure1.CompareTo(New Object))              ' (1)
            '
            Console.ReadLine()
        End Sub
    End Class
End Namespace
Console Application Output
1

23.2.2. IComparable(Of T) Interface

Deze constructie (private implementation en het toevoegen van een typesafe versie) kan worden vereenvoudigd door de generieke versie IComparable(Of T) van de interface IComparable te gaan implementeren.

Als we Figure als actuele generieke parameter gebruiken, zal een generieke instantie worden geïmplementeerd die meteen een implementatie vereist voor een CompareTo method met argument van het type Figure :
Visual Basic 2012 Broncode - Codevoorbeeld 591
Namespace Example2
    MustInherit Class Figure : Implements IComparable(Of Figure)
        Public MustOverride Function GetArea() As Double
        Public Function CompareTo(ByVal other As Figure) As Integer _
                                     Implements IComparable(Of Figure).CompareTo
            CompareTo = Me.GetArea().CompareTo(other.GetArea())
        End Function
    End Class
    Class Square : Inherits Figure
        Public Property Side As Double
        Public Overrides Function GetArea() As Double
            GetArea = Side ^ 2
        End Function
    End Class
    Class Circle : Inherits Figure
        Public Property Radius As Double
        Public Overrides Function GetArea() As Double
            GetArea = Radius ^ 2 * System.Math.PI
        End Function
    End Class
    Class Client
        Public Shared Sub Main()
            Dim figure1 As Figure = New Square With {.Side = 2}
            Dim figure2 As Figure = New Circle With {.Radius = 1}
            '
            Console.WriteLine(figure1.CompareTo(figure2))
            'Console.WriteLine(figure1.CompareTo(New Object))              ' (1)
            '
            Console.ReadLine()
        End Sub
    End Class
End Namespace
Console Application Output
1

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.