VB.Net Tutorial/Class Module/Class Inheritance — различия между версиями

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

Текущая версия на 15:55, 26 мая 2010

Call base method

<source lang="vbnet">Option Strict On Public Class BaseClass

  Public Sub MainMethod()
     Console.WriteLine("Calling Me.Method1...")
     Me.Method1()
     Console.WriteLine("Calling MyClass.Method1...")
     MyClass.Method1()
  End Sub
  Public Overridable Sub Method1()
     Console.WriteLine("BaseClass.Method1...")
  End Sub

End Class Public Class DerivedClass : Inherits BaseClass

     Public Overrides Sub Method1()
        Console.WriteLine("DerivedClass.Method1...")
     End Sub

End Class Public Module modMain

  Public Sub Main()
     Console.WriteLine("Invoking BaseClass.MainMethod")
     Dim bc As New BaseClass
     bc.MainMethod()
     Console.WriteLine()
     Console.WriteLine("Invoking DerivedClass.MainMethod")
     Dim dc As New DerivedClass
     dc.MainMethod()
  End Sub

End Module</source>

Invoking BaseClass.MainMethod
Calling Me.Method1...
BaseClass.Method1...
Calling MyClass.Method1...
BaseClass.Method1...
Invoking DerivedClass.MainMethod
Calling Me.Method1...
DerivedClass.Method1...
Calling MyClass.Method1...
BaseClass.Method1...

Circle class that inherits from class Point

<source lang="vbnet">Module Tester

  Sub Main()
     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 " Main

End Module

Public Class Point

  Protected mX, mY As Integer
  Public Sub New()
     X = 0
     Y = 0
  End Sub " New
  Public Sub New(ByVal xValue As Integer, _
     ByVal yValue As Integer)
     X = xValue
     Y = yValue
  End Sub " New
  Public Property X() As Integer
     Get
        Return mX
     End Get
     Set(ByVal xValue As Integer)
        mX = xValue " no need for validation
     End Set
  End Property " X
  Public Property Y() As Integer
     Get
        Return mY
     End Get
     Set(ByVal yValue As Integer)
        mY = yValue " no need for validation
     End Set
  End Property " Y
  Public Overrides Function ToString() As String
     Return "[" & mX & ", " & mY & "]"
  End Function " ToString

End Class

Public Class Circle

  Inherits Point " Circle Inherits from class Point
  Private mRadius As Double " Circle"s radius
  Public Sub New()
     Radius = 0
  End Sub " New
  Public Sub New(ByVal xValue As Integer, _
     ByVal yValue As Integer, ByVal radiusValue As Double)
     mX = xValue
     mY = yValue
     Radius = radiusValue
  End Sub " New
  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
  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
     Return "Center = " & "[" & mX & ", " & mY & "]" & _
        "; Radius = " & mRadius
  End Function " ToString

End Class</source>

X coordinate is 37
Y coordinate is 43
Radius is 2.5
The new location and radius of circle are
Center = [2, 2]; Radius = 4.25
Diameter is 8.50
Circumference is 26.70
Area is 56.75

Class implicitly Inherits Object

<source lang="vbnet">Module Tester

  Sub Main()
     Dim point As CPoint
     point = New CPoint(2, 5) 
     Console.WriteLine("X coordinate is " & point.X & _
        vbCrLf & "Y coordinate is " & point.Y)
     point.X = 10 
     point.Y = 10 
     Console.WriteLine("The new location of point is " & point.ToString())
  End Sub " Main

End Module Public Class CPoint

  " implicitly Inherits Object
  Private mX, mY As Integer
  Public Sub New()
     X = 0
     Y = 0
  End Sub
  
  Public Sub New(ByVal xValue As Integer,ByVal yValue As Integer)
     X = xValue
     Y = yValue
  End Sub " New
  Public Property X() As Integer
     Get
        Return mX
     End Get
     Set(ByVal xValue As Integer)
        mX = xValue " no need for validation
     End Set
  End Property " X
  Public Property Y() As Integer
     Get
        Return mY
     End Get
     Set(ByVal yValue As Integer)
        mY = yValue " no need for validation
     End Set
  End Property " Y
  Public Overrides Function ToString() As String
     Return "[" & mX & ", " & mY & "]"
  End Function " ToString

End Class</source>

X coordinate is 2
Y coordinate is 5
The new location of point is [10, 10]

Class inheritance and polymorphism

<source lang="vbnet">Imports System.Collections public class Test

  public Shared Sub Main
       Dim objShape1 As New Triangle
       Dim objShape2 As New Circle
       Dim objShape3 As New Square
       Dim ShapeEnum As IEnumerator
       Dim dblTotalArea As Double
       objShape1.SideA = 3
       objShape1.SideB = 3.2
       objShape1.SideC = 0.94
       Console.WriteLine("The triangle"s area is " & objShape1.Area.ToString & ".")
       objShape2.Radius = 4
       Console.WriteLine("The circle"s area is " & objShape2.Area.ToString & ".")
       objShape3.Side = 10.01
       Console.WriteLine("The square"s area is " & objShape3.Area.ToString & ".")
       Dim aryShapes() As Shape = {objShape1, objShape2, objShape3}
       ShapeEnum = aryShapes.GetEnumerator
       While ShapeEnum.MoveNext
           dblTotalArea += CType(ShapeEnum.Current, Shape).Area
       End While
       Console.WriteLine("The total area of your shapes is " & dblTotalArea.ToString & ".")
  End Sub

End class Public MustInherit Class Shape

   Public MustOverride Function Area() As Double
   Public MustOverride Function Perimeter() As Double

End Class

Public Class Square

   Inherits Shape
   Private mySide As Double
   Public Property Side() As Double
       Get
           Side = mySide
       End Get
       Set(ByVal Value As Double)
           mySide = Value
       End Set
   End Property
   Public Overrides Function Area() As Double
       Area = mySide * mySide
   End Function
   Public Overrides Function Perimeter() As Double
       Return (4 * mySide)
   End Function

End Class Public Class Triangle

   Inherits Shape
   Private mySide1, mySide2, mySide3 As Double
   Property SideA() As Double
       Get
           SideA = mySide1
       End Get
       Set(ByVal Value As Double)
           mySide1 = Value
       End Set
   End Property
   Property SideB() As Double
       Get
           SideB = mySide2
       End Get
       Set(ByVal Value As Double)
           mySide2 = Value
       End Set
   End Property
   Public Property SideC() As Double
       Get
           SideC = mySide3
       End Get
       Set(ByVal Value As Double)
           mySide3 = Value
       End Set
   End Property
   Public Overrides Function Area() As Double
       Dim dblPerim As Double
       dblPerim = Perimeter()
       Return (Math.Sqrt(dblPerim * (dblPerim - mySide1) * _
       (dblPerim - mySide2) * (dblPerim - mySide3)))
   End Function
   Public Overrides Function Perimeter() As Double
       Return (mySide1 + mySide2 + mySide3)
   End Function
   Sub New(ByVal SideA As Double, ByVal SideB As Double, ByVal SideC As Double)
       MyBase.New()
       mySide1 = SideA
       mySide2 = SideB
       mySide3 = SideC
   End Sub
   Sub New()
       MyBase.New()
   End Sub

End Class Public Class Circle

   Inherits Shape
   Private m_dblRadius As Double
   Public Property Radius() As Double
       Get
           Radius = m_dblRadius
       End Get
       Set(ByVal Value As Double)
           m_dblRadius = Value
       End Set
   End Property
   Public Overrides Function Area() As Double
       Return (Math.PI * m_dblRadius ^ 2)
   End Function
   Public Overrides Function Perimeter() As Double
       Return (2 * Math.PI * m_dblRadius)
   End Function
   Sub New()
       MyBase.New()
   End Sub
   Sub New(ByVal Radius As Double)
       MyBase.New()
       m_dblRadius = Radius
   End Sub

End Class</source>

The triangle"s area is 26.8715818068085.
The circle"s area is 50.2654824574367.
The square"s area is 100.2001.
The total area of your shapes is 177.337164264245.

Inherit constant from base class

<source lang="vbnet">Public Class ConstantBase

  Public Const GENERATION As Integer = 1

End Class Public Class ConstantDerived : Inherits ConstantBase End Class Public Class classMain

  Public Shared Sub Main()
      Dim cd As New ConstantDerived
      Console.WriteLine(cd.GENERATION)
  End Sub

End Class</source>

1

Inherit ToString method from Object

<source lang="vbnet">Option Strict On Public Class EmptyClass End Class Public Module modMain

  Public Sub Main()
     Dim ec As New EmptyClass
     Console.WriteLine(ec.ToString()) 
  End Sub

End Module</source>

EmptyClass

Multilevel inheritance

<source lang="vbnet">Class Person

   Public Name As String
   Public Age As Integer
   Public Sub New(ByVal Name As String, ByVal Age As Integer)
       Me.Name = Name
       Me.Age = Age
   End Sub

End Class Class Player

   Inherits Person
   Public Sport As String
   Public Team As String
   Public Sub New(ByVal Name As String, ByVal Age As Integer, _
   ByVal Sport As String, ByVal Team As String)
       MyBase.New(Name, Age)
       Me.Team = Team
       Me.Sport = Sport
   End Sub

End Class Class BasketPlayer

   Inherits Player
   Public PointsPerGame As Double
   Public Rebounds As Double
   Public Sub New(ByVal Name As String, ByVal Age As Integer, _
   ByVal Sport As String, ByVal Team As String, ByVal Points As Double, ByVal Rebounds As Double)
       MyBase.New(Name, Age, Sport, Team)
       Me.PointsPerGame = Points
       Me.Rebounds = Rebounds
   End Sub
   Public Sub Show()
       Console.WriteLine("Player: " & Name)
       Console.WriteLine("Age: " & Age)
       Console.WriteLine("Sport: " & Sport)
       Console.WriteLine("Team: " & Team)
       Console.WriteLine("Points: " & PointsPerGame)
       Console.WriteLine("Rebounds: " & Rebounds)
   End Sub

End Class Module Module1

   Sub Main()
       Dim K As New BasketPlayer("AA", 12, "Basketball", "Team", 25.5, 6.3)
       K.Show()
   End Sub

End Module</source>

Player: AA
Age: 12
Sport: Basketball
Team: Team
Points: 25.5
Rebounds: 6.3

Shadows member function from base class

<source lang="vbnet">Option Strict On Public Class ShadowClass

  Private value As String
  Public Sub New(value As String)
     Me.value = value
  End Sub
  Public Shadows Function ToString() As String
     Return "Value of " & Me.GetType.Name & ": " & Me.value
  End Function

End Class Public Module ShadowTest

  Public Sub Main()
     Dim sc As ShadowClass = New ShadowClass("The Shadow")
     Console.WriteLine(sc.ToString())
     Dim obj As Object = New ShadowClass("The Shadow")
     Console.WriteLine(obj.ToString())
  End Sub

End Module</source>

Value of ShadowClass: The Shadow
ShadowClass

Simple Inheritance

<source lang="vbnet">Public Class Tester

   Public Shared Sub Main
       Dim objJohn As New John
       objJohn.Walk()
   End Sub

End Class

Public Class Person

   Public Sub Walk()
       Console.WriteLine("Walking...")
   End Sub

End Class Class John

   Inherits Person

End Class</source>

Walking...

Use For Each for Class Hierarchy

<source lang="vbnet">public class Test

  public Shared Sub Main
       Dim people As New Collection
       people.Add(New Employee("A"))
       people.Add(New Customer("B"))
       For Each person As Object In people
           Console.WriteLine(person.Name)
       Next person
  End Sub

End class

Public Class Employee

   Public Name As String
   Public Sub New(ByVal new_name As String)
       Name = new_name
   End Sub
   Public Overridable Function IsManager() As Boolean
       Return False
   End Function

End Class Public Class Customer

   Public Name As String
   Public Sub New(ByVal new_name As String)
       Name = new_name
   End Sub

End Class Public Class Manager

   Inherits Employee
   Public Sub New(ByVal new_name As String)
       MyBase.new(new_name)
   End Sub
   Public Overrides Function IsManager() As Boolean
       Return True
   End Function

End Class</source>

A
B