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