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

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

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

Call member method in constructor

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

  Dim ctr As Integer
  Public Sub New()
     For ctr = 1 to 20
        DoSomething()
     Next
  End Sub
  Public Sub DoSomething()
     Console.WriteLine(Me.ctr)
  End Sub

End Class Public Module modMain

  Public Sub Main()
     Dim obj As New Counters()
  End Sub

End Module</source>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

Class with constructor

<source lang="vbnet">Option Strict On

Imports System
Public Class Time
   " Private variables
   Private Year As Integer
   Private Month As Integer
   Private mDate As Integer
   Private Hour As Integer
   Private Minute As Integer
   Private Second As Integer
   " Public methods
   Public Sub DisplayCurrentTime( )
        System.Console.WriteLine("{0}/{1}/{2} {3}:{4}:{5}", Month, mDate, Year, Hour, Minute, Second)
   End Sub "DisplayCurrentTime
   " Constructor
   Public Sub New(ByVal theYear As Integer,ByVal theMonth As Integer, _
                  ByVal theDate As Integer, ByVal theHour As Integer, _
                  ByVal theMinute As Integer, ByVal theSecond As Integer)
      Year = theYear
      Month = theMonth
      mDate = theDate
      Hour = theHour
      Minute = theMinute
      Second = theSecond
   End Sub
End Class "Time
Module Module1
   Sub Main( )
      Dim timeObject As New Time(2005, 3, 25, 9, 35, 20)
      timeObject.DisplayCurrentTime( )
   End Sub
End Module</source>
3/25/2005 9:35:20

Constructor Chain

<source lang="vbnet">Public Class YourClass

 Public Address as String = "Default"
 Public City As String = "Default"
 Sub New()
   MyBase.New()
   Console.WriteLine("YourClass Created")
 End Sub
 Sub New(A as String, C As String)
   Me.New()
   Address = A
   City = C
   Console.WriteLine("YourClass.Address and Set")
 End Sub

End Class Module Test

 Sub Main()
   Dim SL As New YourClass("123 First Street", "Somewhere")  
 End Sub

End Module</source>

YourClass Created
YourClass.Address and Set

constructor inheriting

<source lang="vbnet">Public Class Address

 Private MyState as String = "DEFAULT"
 Sub New()
   MyBase.New()
   Console.WriteLine("Address Created")
 End Sub
 Public Property State As String
   Get
     Return MyState
   End Get
   Set(Value As String)
     MyState = Value
   End Set
 End Property

End Class Public Class MyAddress

 Inherits Address
 Private MyAddress as String
 Sub New()
   MyBase.New()
   Console.WriteLine("MyAddress Created")
 End Sub
 Public Property Address as String
   Get
     Return MyAddress
   End Get
   Set(Value As String)
     MyAddress = Value
   End Set
 End Property

End Class Module Test

 Sub Main()
   Dim SL As New MyAddress() 
   SL.State = "CANADA"
   SL.Address = "123"
 End Sub

End Module</source>

Address Created
MyAddress Created

Constructors in three levels

<source lang="vbnet">Class A

   Public Sub New()
       Console.WriteLine("In class A constructor")
   End Sub

End Class Class B

   Inherits A
   Public Sub New()
       Console.WriteLine("In class B constructor")
   End Sub

End Class Class C

   Inherits B
   Public Sub New()
       Console.WriteLine("In class C constructor")
   End Sub

End Class Module Module1

   Sub Main()
       Dim objSample As New C()
   End Sub

End Module</source>

In class A constructor
In class B constructor
In class C constructor

Constructor with Optional parameter

<source lang="vbnet">Public Class Point

 Private MX as Integer
 Private MY as Integer
 Public Sub New(Optional X As Integer = 0, Optional Y As Integer = 0)
   MX = X
   MY = Y
 End Sub
 Public Overrides Function ToString() As String 
   Return "(" & MX & "," & MY & ")"
 End Function

End Class Module OptionalPoint

 Sub Main
   Dim P1 As New Point()
   Console.WriteLine(P1.ToString())
   Dim P2 As New Point(1, 1)
   Console.WriteLine(P2.ToString())
   Dim P3 As New Point(, 1)
   Console.WriteLine(P3.ToString())
   Dim P4 As New Point(9, )
   Console.WriteLine(P4.ToString())
 End Sub

End Module</source>

(0,0)
(1,1)
(0,1)
(9,0)

Copy constructor

<source lang="vbnet">Option Strict On

Imports System
Public Class Time
   " Private variables
   Private Year As Integer
   Private Month As Integer
   Private mDate As Integer
   Private Hour As Integer
   Private Minute As Integer
   Private Second As Integer = 30
   " Public methods
   Public Sub DisplayCurrentTime( )
        System.Console.WriteLine("{0}/{1}/{2} {3}:{4}:{5}", _
            Month, mDate, Year, Hour, Minute, Second)
   End Sub "DisplayCurrentTime
   Public Sub New( _
   ByVal theYear As Integer, _
   ByVal theMonth As Integer, _
   ByVal theDate As Integer, _
   ByVal theHour As Integer, _
   ByVal theMinute As Integer)
      Year = theYear
      Month = theMonth
      mDate = theDate
      Hour = theHour
      Minute = theMinute
   End Sub
   Public Sub New(existingObject As Time)
      Year = existingObject.Year
      Month = existingObject.Month
      mDate = existingObject.mDate
      Hour = existingObject.Hour
      Minute = existingObject.Minute
      Second = existingObject.Second
   End Sub
End Class "Time
Module Module1
   Sub Main( )
      Dim timeObject As New Time(2005, 3, 25, 9, 35)
      Dim t2 As New Time(timeObject)
      timeObject.DisplayCurrentTime( )
      t2.DisplayCurrentTime( )
   End Sub
End Module</source>
3/25/2005 9:35:30
3/25/2005 9:35:30

Default constructor

<source lang="vbnet">Imports System Module Test

 Sub Main()
   Dim p1 as New Point()
   Dim p2 as New Point()
   p2.Y = 100
   p2.X = 100
   Console.WriteLine(p1)
   Console.WriteLine(p2)
 End Sub

End Module Class Point

 Public X as Integer
 Public Y as Integer
 Public Overrides Function ToString() as String
   Return("(" & X & "," & Y & ")")  
 End function

End Class</source>

(0,0)
(100,100)

Empty constructor

<source lang="vbnet">Imports System Module Test

 Sub Main()
   Dim p1 as New Point()
   Dim p2 as New Point(100,100) 
   Console.WriteLine(p1)
   Console.WriteLine(p2)
 End Sub

End Module Class Point

 Private X as Integer
 Private Y as Integer
 Sub New()
 End Sub
 Sub New(x as integer, y as Integer)
   Me.X = x
   Me.Y = y
 End Sub
 Public Overrides Function ToString() as String
   Return("(" & X & "," & Y & ")")  
 End function

End Class</source>

(0,0)
(100,100)

Inheriting Constructors

<source lang="vbnet">Public Class Tester

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

End Class Public Class Person

   Private Text As String
   Public Sub New(ByVal Message As String)
       Text = Message
   End Sub
   Public Sub Walk()
       Console.WriteLine(Text)
   End Sub

End Class Class John

   Inherits Person
   Public Sub New(ByVal Message As String)
       MyBase.New(Message)
   End Sub

End Class</source>

Walking...

Overloaded constructors

<source lang="vbnet">Module Tester

  Sub Main()
     " use overloaded constructors
     Dim time1 As New MyTime()
     Dim time2 As New MyTime(2)
     Dim time3 As New MyTime(21, 34)
     Dim time4 As New MyTime(12, 25, 42)
     Dim time5 As New MyTime(27, 74, 99)
     Dim time6 As New MyTime(time4) " use time4 as initial value
     Console.WriteLine(time1.ToUniversalString() )
     Console.WriteLine(time2.ToUniversalString() )
     Console.WriteLine(time3.ToUniversalString())
     Console.WriteLine(time4.ToUniversalString())
     Console.WriteLine(time5.ToUniversalString())
     Console.WriteLine(time6.ToUniversalString())
  End Sub " Main

End Module Class MyTime

  Inherits Object
  Private mHour As Integer   " 0 - 23
  Private mMinute As Integer " 0 - 59
  Private mSecond As Integer " 0 - 59
  Public Sub New()
     SetTime()
  End Sub " New
  Public Sub New(ByVal hourValue As Integer)
     SetTime(hourValue)
  End Sub " New
  Public Sub New(ByVal hourValue As Integer, _
     ByVal minuteValue As Integer)
     SetTime(hourValue, minuteValue)
  End Sub " New
  Public Sub New(ByVal hourValue As Integer, _
     ByVal minuteValue As Integer, ByVal secondValue As Integer)
     SetTime(hourValue, minuteValue, secondValue)
  End Sub " New
  Public Sub New(ByVal timeValue As MyTime)
     SetTime(timeValue.mHour, timeValue.mMinute, timeValue.mSecond)
  End Sub " New
  Public Sub SetTime(Optional ByVal hourValue As Integer = 0, _
     Optional ByVal minuteValue As Integer = 0, _
     Optional ByVal secondValue As Integer = 0)
     If (hourValue >= 0 AndAlso hourValue < 24) Then
        mHour = hourValue
     Else
        mHour = 0
     End If
     If (minuteValue >= 0 AndAlso minuteValue < 60) Then
        mMinute = minuteValue
     Else
        mMinute = 0
     End If
     If (secondValue >= 0 AndAlso secondValue < 60) Then
        mSecond = secondValue
     Else
        mSecond = 0
     End If
  End Sub " SetTime
  Public Function ToUniversalString() As String
     Return String.Format("{0}:{1:D2}:{2:D2}", _
        mHour, mMinute, mSecond)
  End Function " ToUniversalString

End Class</source>

0:00:00
2:00:00
21:34:00
12:25:42
0:00:00
12:25:42

Private Constructor

<source lang="vbnet">Public Class Util

 Private Sub New()
 End Sub
 Public Shared Function QuoteIt(ToQuote as String, Author As String) As String
   Return ToQuote + "  - " + Author
 End Function
 
 Public Shared Function UpperLower(ToChange as String) As String
   Dim i as Integer
   Dim stringBuilder as New Text.StringBuilder(ToChange)
   For i = 0 To ToChange.Length - 1
       stringBuilder.Chars(i) = Char.ToUpper(stringBuilder.Chars(i))
   Next
   Return stringBuilder.ToString()
 End Function

End Class Module Test

 Sub Main
   Console.WriteLine(Util.QuoteIt("A", "B"))
   Console.WriteLine(Util.UpperLower("AAaa"))
 End Sub

End Module</source>

A  - B
AAAA

Shared Constructor

<source lang="vbnet">Public Class YourClass

 Private Shared ID as Integer = 10
 Public Shared ReadOnly Property CurrentID as Integer
   Get
     Return ID
   End Get
 End Property
 Public Shared Function GetID() as Integer
   ID += 1
   Return ID
 End Function
 Shared Sub New()
   Console.WriteLine("Before init: " & ID)
   ID = 100
   Console.WriteLine("After init: " & ID)
 End Sub

End Class Module Test

 Sub Main()
   Dim CountValue As Integer
   For CountValue = 1 to 10
     Console.WriteLine(YourClass.GetID())
   Next
 End Sub

End Module</source>

Before init: 10
After init: 100
101
102
103
104
105
106
107
108
109
110