VB.Net/Class/Overridable

Материал из VB Эксперт
Перейти к: навигация, поиск

Define Overridable Member Function

<source lang="vbnet"> Imports System Public Class MainClass

   Shared Sub Main(ByVal args As String())
     Dim circle As Circle
     circle = New Circle(37, 43, 2.5) " instantiate Circle
     Console.WriteLine( "X coordinate is " & circle.X & vbCrLf & _
        "Y coordinate is " & circle.Y & vbCrLf & "Radius is " & _
        circle.Radius )
     circle.X = 2
     circle.Y = 2
     circle.Radius = 4.25
     Console.WriteLine("The new location and radius of circle are " & _
        vbCrLf & circle.ToString() )
     Console.WriteLine( "Diameter is " & _
        String.Format("{0:F}", circle.Diameter()) )
     Console.WriteLine("Circumference is " & _
        String.Format("{0:F}", circle.Circumference()) )
     Console.WriteLine( "Area is " & String.Format("{0:F}", circle.Area()) )
   End Sub

End Class

Public Class Circle

  Inherits Point " Circle Inherits from class Point
  Private mRadius As Double
  " default constructor
  Public Sub New()
     " implicit call to Point constructor occurs here
     Radius = 0
  End Sub " New
  " constructor
  Public Sub New(ByVal xValue As Integer, _
     ByVal yValue As Integer, ByVal radiusValue As Double)
     " use MyBase reference to Point constructor explicitly
     MyBase.New(xValue, yValue)
     Radius = radiusValue
  End Sub " New
  " property Radius
  Public Property Radius() As Double
     Get
        Return mRadius
     End Get
     Set(ByVal radiusValue As Double)
        If radiusValue > 0 Then
           mRadius = radiusValue
        End If
     End Set
  End Property " Radius
  " calculate Circle diameter
  Public Function Diameter() As Double
     Return mRadius * 2
  End Function " Diameter
  " calculate Circle circumference
  Public Function Circumference() As Double
     Return Math.PI * Diameter()
  End Function " Circumference
  " calculate Circle area
  Public Overridable Function Area() As Double
     Return Math.PI * mRadius ^ 2
  End Function " Area
  " return String representation of Circle
  Public Overrides Function ToString() As String
     " use MyBase reference to return Point String representation
     Return "Center = " & MyBase.ToString() & _
        "; Radius = " & mRadius
  End Function " ToString

End Class

Public Class Point

  " implicitly Inherits Object
  " point coordinate
  Private mX, mY As Integer
  " default constructor
  Public Sub New()
     " implicit call to Object constructor occurs here
     X = 0
     Y = 0
  End Sub " New
  " constructor
  Public Sub New(ByVal xValue As Integer, _
     ByVal yValue As Integer)
     " implicit call to Object constructor occurs here
     X = xValue
     Y = yValue
  End Sub " New
  " property X
  Public Property X() As Integer
     Get
        Return mX
     End Get
     Set(ByVal value As Integer)
        mX = value
     End Set
  End Property " X
  " property Y 
  Public Property Y() As Integer
     Get
        Return mY
     End Get
     Set(ByVal value As Integer)
        mY = value
     End Set
  End Property " Y
  " return String representation of Point
  Public Overrides Function ToString() As String
     Return "[" & mX & ", " & mY & "]"
  End Function " ToString

End Class

      </source>


Overridable Overloads Method from Base Class

<source lang="vbnet"> Imports System Imports System.Collections

Public Class MainClass

 Shared Sub Main()
   Dim e1 As New Programmer("E", 150000D)
   e1.RaiseSalary(0.1D) 
   Console.WriteLine(e1.TheName & " salary is now " & e1.Salary())
 End Sub

End Class

Public Class Employee

 Private m_Name As String
 Private m_Salary As Decimal
 Public Sub New(ByVal theName As String, ByVal curSalary As Decimal)
   m_Name = theName
   m_Salary = curSalary
 End Sub
 Public ReadOnly Property TheName() As String
   Get
     Return m_Name
   End Get
 End Property
 Public ReadOnly Property Salary() As Decimal
   Get
     Return MyClass.m_Salary
   End Get
 End Property
 Public Overridable Overloads Sub RaiseSalary(ByVal Percent As Decimal)
     m_Salary = (1 + Percent) * m_Salary
 End Sub

End Class Public Class Programmer

 Inherits Employee
 Public Sub New(ByVal theName As String, ByVal curSalary As Decimal)
   MyBase.New(theName, curSalary)
 End Sub
 Public Overloads Overrides Sub RaiseSalary(ByVal Percent As Decimal)
   MyBase.RaiseSalary(1.2D * Percent)
 End Sub

End Class

      </source>


Use Overridable Function

<source lang="vbnet"> Imports System Public Class MainClass

   Shared Sub Main(ByVal args As String())
     " instantiate object of class Cylinder
     Dim cylinder As New Cylinder(12, 23, 2.5, 5.7)
     " properties get initial x-y coordinate, radius and height
     Console.WriteLine( "X coordinate is " & cylinder.X & vbCrLf & _
        "Y coordinate is " & cylinder.Y & vbCrLf & "Radius is " & _
        cylinder.Radius & vbCrLf & "Height is " & cylinder.Height )
     " properties set new x-y coordinate, radius and height
     cylinder.X = 2
     cylinder.Y = 2
     cylinder.Height = 10
     cylinder.Radius = 4.25
     " get new x-y coordinate and radius
     Console.WriteLine( "The new location, radius " & _
        "and height of cylinder are" & vbCrLf & "Center = [" & _
        cylinder.ToString() )
        
     " display Cylinder"s diameter
     Console.WriteLine( "Diameter is " & _
        String.Format("{0:F}", cylinder.Diameter()) )
     " display Cylinder"s circumference
     Console.WriteLine( "Circumference is " & _
        String.Format("{0:F}", cylinder.Circumference()) )
     " display Cylinder"s area
     Console.WriteLine("Area is " & _
        String.Format("{0:F}", cylinder.Area()) )
     " display Cylinder"s volume
     Console.WriteLine( "Volume is " & _
        String.Format("{0:F}", cylinder.Volume()) )
   End Sub

End Class

Public Class Cylinder

  Inherits Circle
  Private mHeight As Double
  " default constructor
  Public Sub New()
     Height = 0
  End Sub " New
  " four-argument constructor
  Public Sub New(ByVal xValue As Integer, _
     ByVal yValue As Integer, ByVal radiusValue As Double, _
     ByVal heightValue As Double)
     " explicit call to Circle constructor
     MyBase.New(xValue, yValue, radiusValue)
     Height = heightValue " set Cylinder height
  End Sub " New
  " property Height
  Public Property Height() As Double
     Get
        Return mHeight
     End Get
     " set Cylinder height if argument value is positive
     Set(ByVal heightValue As Double)
        If heightValue >= 0 Then
           mHeight = heightValue
        End If
     End Set
  End Property " Height
  " override method Area to calculate Cylinder area
  Public Overrides Function Area() As Double
     Return 2 * MyBase.Area + MyBase.Circumference * mHeight
  End Function " Area
  " calculate Cylinder volume
  Public Function Volume() As Double
     Return MyBase.Area * mHeight
  End Function " Volume
  " convert Cylinder to String
  Public Overrides Function ToString() As String
     Return MyBase.ToString() & "; Height = " & mHeight
  End Function " ToString

End Class Public Class Circle

  Inherits Point " Circle Inherits from class Point
  Private mRadius As Double
  " default constructor
  Public Sub New()
     " implicit call to Point constructor occurs here
     Radius = 0
  End Sub " New
  " constructor
  Public Sub New(ByVal xValue As Integer, _
     ByVal yValue As Integer, ByVal radiusValue As Double)
     " use MyBase reference to Point constructor explicitly
     MyBase.New(xValue, yValue)
     Radius = radiusValue
  End Sub " New
  " property Radius
  Public Property Radius() As Double
     Get
        Return mRadius
     End Get
     Set(ByVal radiusValue As Double)
        If radiusValue > 0 Then
           mRadius = radiusValue
        End If
     End Set
  End Property " Radius
  " calculate Circle diameter
  Public Function Diameter() As Double
     Return mRadius * 2
  End Function " Diameter
  " calculate Circle circumference
  Public Function Circumference() As Double
     Return Math.PI * Diameter()
  End Function " Circumference
  " calculate Circle area
  Public Overridable Function Area() As Double
     Return Math.PI * mRadius ^ 2
  End Function " Area
  " return String representation of Circle
  Public Overrides Function ToString() As String
     " use MyBase reference to return Point String representation
     Return "Center = " & MyBase.ToString() & _
        "; Radius = " & mRadius
  End Function " ToString

End Class

Public Class Point

  " implicitly Inherits Object
  " point coordinate
  Private mX, mY As Integer
  " default constructor
  Public Sub New()
     " implicit call to Object constructor occurs here
     X = 0
     Y = 0
  End Sub " New
  " constructor
  Public Sub New(ByVal xValue As Integer, _
     ByVal yValue As Integer)
     " implicit call to Object constructor occurs here
     X = xValue
     Y = yValue
  End Sub " New
  " property X
  Public Property X() As Integer
     Get
        Return mX
     End Get
     Set(ByVal value As Integer)
        mX = value
     End Set
  End Property " X
  " property Y 
  Public Property Y() As Integer
     Get
        Return mY
     End Get
     Set(ByVal value As Integer)
        mY = value
     End Set
  End Property " Y
  " return String representation of Point
  Public Overrides Function ToString() As String
     Return "[" & mX & ", " & mY & "]"
  End Function " ToString

End Class

      </source>