Like a regular class, an interface can be derived from
another interface but an interface cannot derive from a class. To create
an interface based on another, use the Inherits keyword as we have used in
other classes. Here is an example:
File: RegularTriangle.vbPublic Interface IGeometricShape
End Interface
Public Interface ITriangle
Inherits IGeometricShape
End Interface
As mentioned for the interfaces, you can use the
parent interface to list the members that the deriving classes would
implement. Still remember that since an interface cannot implement a
member, the member of the parent interface cannot be defined in a derived
interface. This implement would wait for the actual class(es) that would
be based on the child (or even the parent) interface. Here is an example:
File: RegularTriangle.vbPublic Interface IGeometricShape
ReadOnly Property Type() As String
End Interface
Public Interface ITriangle
Inherits IGeometricShape
ReadOnly Property Name() As String
Property Base() As Double
Property Height() As Double
Function CalculatePerimeter() As Double
Function CalculateArea() As Double
End Interface
After deriving a class from an interface, when
defining the class, you must implement the member of the immediate
interface and those of the ancestor interface(s). Here is an example:
File: RegularTriangle.vbPublic Interface IGeometricShape
ReadOnly Property Type() As String
End Interface
Public Interface ITriangle
Inherits IGeometricShape
ReadOnly Property Name() As String
Property Base() As Double
Property Height() As Double
Function CalculatePerimeter() As Double
Function CalculateArea() As Double
End Interface
Public Class RegularTriangle
Implements ITriangle
Public bas As Double
Public hgt As Double
Public sd1 As Double
Public sd2 As Double
Public ReadOnly Property Type() As String Implements ITriangle.type
Get
Return "Triangle"
End Get
End Property
' Default constructor: the user will specify the dimensions
Public Sub New()
bas = 0
hgt = 0
sd1 = 0
sd2 = 0
End Sub
' A triangle based on known base and height
Public Sub New(ByVal b As Double, ByVal h As Double)
bas = b
hgt = h
End Sub
' A triangle based on the measurements of the sides
Public Sub New(ByVal b As Double, ByVal side1 As Double, ByVal side2 As Double)
bas = b
sd1 = side1
sd2 = side2
End Sub
' A triangle whose all sides and the height are known
Public Sub New(ByVal b As Double, ByVal h As Double, _
ByVal side1 As Double, ByVal side2 As Double)
bas = b
hgt = h
sd1 = side1
sd2 = side2
End Sub
Public Property Base() As Double Implements ITriangle.Base
Get
Return bas
End Get
Set(ByVal Value As Double)
If bas < 0 Then
bas = 0
Else
bas = Value
End If
End Set
End Property
Public Function CalculateArea() As Double Implements ITriangle.CalculateArea
Return bas * hgt / 2
End Function
Public Function CalculatePerimeter() As Double Implements _
ITriangle.CalculatePerimeter
Return bas + sd1 + sd2
End Function
Public Property Height() As Double Implements ITriangle.Height
Get
Return hgt
End Get
Set(ByVal Value As Double)
If hgt < 0 Then
hgt = 0
Else
hgt = Value
End If
End Set
End Property
Public ReadOnly Property Name() As String Implements ITriangle.Name
Get
Return "Regular"
End Get
End Property
End Class
Here is an example of testing the class:
File: Exercise.vbModule Exercise
Public Function Main() As Integer
Dim reg As RegularTriangle = New RegularTriangle(35.28, 26.44)
Response.Write("Shape Type: " & reg.Type)
Response.Write("Triangle Type: " & reg.Name)
Response.Write("=-= Characteristics =-=")
Response.Write("Base: " & reg.Base)
Response.Write("Height: " & reg.Height)
Response.Write("Area: " & reg.CalculateArea)
Return 0
End Function
End Module
This would produce:
Shape Type: Triangle Triangle Type: Regular =-= Characteristics =-= Base: 35.28 Height: 26.44 Area: 466.4016
Multiple inheritance consists of creating a class that
is based on more than one parent. In the Microsoft Visual Basic language
(in fact in the .NET Framework), you cannot derive a class from more than
one class. This functionality is available only with interfaces.
To create a class based on more than one interface,
after the Implements keyword, enter the name of each interface and
separate them with commas. Here is an example:
Public Interface IGeometricShape
ReadOnly Property Type() As String
End Interface
Public Interface ICalculation
End Interface
Public Interface ITriangle
Inherits IGeometricShape, ICalculation
End Interface
The same rules apply for multiple inheritance: you
must implements all members of each parent interface.
Besides deriving from an interface, you can also
create a class that is based on a class and one or more interfaces. To do
this, under the line that specifies the name of the class, use the Inherits
keyword to specify the name of the parent, press Enter, and use the Implements
keyword to specify the name of the class that serves as the parent
interface. Here is an example:
Public Interface IGeometricShape
ReadOnly Property Type() As String
End Interface
Public Interface ICalculation
End Interface
Public Class Geometry
End Class
Public Interface ITriangle
Inherits IGeometricShape, ICalculation
End Interface
Public Class RegularTriangle
Inherits Geometry
Implements ITriangle
End Class
In the same way, you can create a class that is based
on more than one interface but it can be based on only one class.
|
Interfaces
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment