VB.Net Tutorial/Class Module/Structure

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

By value or by reference

Option Strict On
Public Class YourClass
   Public Name As String
   Public GPA As Double
End Class
Public Structure YourStructure
   Public Name As String
   Public GPA As Double
End Structure
Public Class Test
   Public Shared Sub Main()
      Dim valueByRef As New YourClass()
      Dim valueByValue As New YourStructure()
      valueByRef.Name = "Jill"
      valueByRef.GPA = 92.3
      valueByValue.Name = "Jill"
      valueByValue.GPA = 92.3
      Dim ref2 As YourClass = valueByRef
      Dim value2 As YourStructure = valueByValue
      ref2.GPA += 2
      value2.GPA += 2
      Console.WriteLine("{0}"s GPA is: {1}", valueByRef.Name, valueByRef.GPA)
      Console.WriteLine("{0}"s GPA is: {1}", valueByValue.Name, valueByValue.GPA)
   End Sub
End Class
Jill"s GPA is: 94.3
Jill"s GPA is: 92.3

Class Vs Structure in ByValue and ByRef

Imports System
Public Enum Country
  US = 1
  CA = 2
End Enum

Public Class AClass
  Public Name As String
  Public Status As Country
End Class
Public Structure AStruct
  Public Name As String
  Public Status As Country
End Structure
Public Module Test
  Public Sub ChangeName_Obj_ByVal(ByVal details As AClass,ByVal NewName As String)
    details.Name = NewName
  End Sub
  Public Sub ChangeName_Obj_ByRef(ByRef details As AClass,ByVal NewName As String)
    details.Name = NewName
  End Sub
  Public Sub ChangeName_Struct_ByVal(ByVal details As AStruct,ByVal NewName As String)
    details.Name = NewName
  End Sub
  Public Sub ChangeName_Struct_ByRef(ByRef details As AStruct,ByVal NewName As String)
    details.Name = NewName
  End Sub
  Sub Main()
    Dim classInstance As AClass = New AClass()
    Dim structInstance As AStruct = New AStruct()
    classInstance.Name = "A"
    classInstance.Status = Country.CA
    structInstance.Name = "B"
    structInstance.Status = Country.CA
    Console.WriteLine("{0}, {1}", classInstance.Name, classInstance.Status)
    Console.WriteLine("{0}, {1}", structInstance.Name, structInstance.Status)
    Console.WriteLine()
    ChangeName_Obj_ByVal(classInstance, "AAAA")
    ChangeName_Struct_ByVal(structInstance, "BBBB")
   
    Console.WriteLine("{0},{1}", classInstance.Name, classInstance.Status)
    Console.WriteLine("{0},{1}", structInstance.Name, structInstance.Status)
    Console.WriteLine()
    ChangeName_Obj_ByRef(classInstance, "AAAA")
    ChangeName_Struct_ByRef(structInstance, "BBBB")
    Console.WriteLine("{0}, {1}", classInstance.Name, classInstance.Status)
    Console.WriteLine("{0}, {1}", structInstance.Name, structInstance.Status)
  End Sub
End Module
A, CA
B, CA
AAAA,CA
B,CA
AAAA, CA
BBBB, CA

Define and use Structure

Structure CheckRecord
    Dim intCheckNumber As Integer
    Dim dteCheckDate As Date
    Dim sngCheckAmount As Single
    Dim strCheckPaidTo As String
End Structure
public class Test
   public Shared Sub Main
        Dim udtCheck As CheckRecord
        "Add data to the structure.
        udtCheck.intCheckNumber = 275
        udtCheck.dteCheckDate = #9/12/2001#
        udtCheck.sngCheckAmount = 104.25
        udtCheck.strCheckPaidTo = "Gas Co."
        Console.WriteLine("CHECK INFORMATION")
        Console.WriteLine("Number: " & udtCheck.intCheckNumber)
        Console.WriteLine("Date: " & udtCheck.dteCheckDate)
        Console.WriteLine("Amount: " & udtCheck.sngCheckAmount)
        Console.WriteLine("Paid To: " & udtCheck.strCheckPaidTo)

   End Sub
End class
CHECK INFORMATION
Number: 275
Date: 12/09/2001
Amount: 104.25
Paid To: Gas Co.

Define and use structure with modifier

Option Strict On
Public Structure Coordinates
   Public x As Double
   Public y As Double
End Structure
Public Module Test
   Public Sub Main()
      Dim coord As Coordinates " The structure as a whole
      
      coord.x = 10.2 " x member
      coord.y = 25.1 " y member
      Console.WriteLine(coord.ToString & ": x=" & coord.x & ", y=" & coord.y)
   End Sub
End Module
Coordinates: x=10.2, y=25.1

Define Structure

Option Strict On
 Imports System
     Public Structure Location
         Private x As Integer
         Private y As Integer
         Public Sub New(ByVal xCoordinate As Integer, ByVal yCoordinate As Integer)
             x = xCoordinate
             y = yCoordinate
         End Sub
         Public Property XValue( ) As Integer
             Get
                 Return x
             End Get
             Set(ByVal Value As Integer)
                 x = Value
             End Set
         End Property
         Public Property YValue( ) As Integer
             Get
                 Return y
             End Get
             Set(ByVal Value As Integer)
                 y = Value
             End Set
         End Property
         Public Overrides Function ToString( ) As String
             Return [String].Format("{0}, {1}", x, y)
         End Function
     End Structure
     Class Tester
         Public Shared Sub myFunc(ByVal loc As Location)
             loc.XValue = 50
             loc.YValue = 100
             Console.WriteLine("Loc1 location: {0}", loc)
         End Sub 
         Shared Sub Main( )
             Dim loc1 As New Location(200, 300)
             Console.WriteLine("Loc1 location: {0}", loc1)
             Dim loc2 As New Location( )
             Console.WriteLine("Loc2 location: {0}", loc2)
             myFunc(loc1)
             Console.WriteLine("Loc1 location: {0}", loc1)
         End Sub 
     End Class
Loc1 location: 200, 300
Loc2 location: 0, 0
Loc1 location: 50, 100
Loc1 location: 200, 300

Structure

Structure Money
   Private centsAmount As Integer
   Public Sub New(ByVal amount As Double)
       Me.centsAmount = CInt(amount * 100)
   End Sub
End Structure
Module MyModule
   Sub Main()
       Dim freebie As Money
       Dim carPrice As Money = New Money(3.95)
   End Sub
End Module

structure implements interface

Imports System
Module MyModule
  Sub Main()
    Dim salaries(4) As Salary
    salaries(0) = New Salary(9)
    salaries(1) = New Salary(4)
    salaries(2) = New Salary(8)
    salaries(3) = salaries(2)
    salaries(4) = New Salary(6)
    Console.WriteLine("Unsorted array:")
    Dim salary As Salary
    For Each salary In salaries
      Console.WriteLine("{0}", salary)
    Next
    Array.Sort(salaries)
    Console.WriteLine(vbCrLf & "Sorted array:")
    For Each salary In salaries
      Console.WriteLine("{0}", salary)
    Next
  End Sub
End Module
Structure Salary
  Implements IComparable
  Private value As Integer
  Public Sub New(ByVal amount As Double)
    Me.value = CInt(amount * 100)
  End Sub
  Public Function CompareTo(ByVal other As Object) As Integer Implements IComparable.rupareTo
    Dim m2 As Salary = CType(other, Salary)
    If Me.value < m2.value Then
      Return -1
    ElseIf Me.value = m2.value Then
      Return 0
    Else
      Return +1
    End If
  End Function
  Public Overrides Function ToString() As String
    Return Me.value
  End Function
End Structure
Unsorted array:
900
400
800
800
600
Sorted array:
400
600
800
800
900

Use Structure as Function parameter

public Structure CustomerBalance
    Dim decBalSavings As Decimal
    Dim decBalChecking As Decimal
End Structure

public class Test
   public Shared Sub Main
        Dim udtBalance As CustomerBalance
        
        udtBalance = GetCustomerBalance(1)
        Console.WriteLine(udtBalance.decBalChecking)
        Console.WriteLine(udtBalance.decBalSavings)
   End Sub
   Shared Function GetCustomerBalance(ByVal intCustomerID As Integer) As CustomerBalance
        Dim udtBalance As CustomerBalance
        udtBalance.decBalChecking = CDec(1000 + 4000 * Rnd())
        udtBalance.decBalSavings = CDec(1000 + 15000 * Rnd())
        Return udtBalance
    End Function
   
End class
3822.19
9001.36

Use With and Structure

Imports System.Collections
Structure Person
    Dim strLastName As String
    Dim strFirstName As String
    Dim strPhone As String
    Dim strEMail As String
End Structure

public class Test
   public Shared Sub Main
        Dim alPersons As New ArrayList
        Dim udtPerson As New Person
        "Add the first person.
        With udtPerson
            .strLastName = "S"
            .strFirstName = "J"
            .strPhone = "5"
            .strEMail = "j@s.ru"
        End With
        alPersons.Add(udtPerson)
        "Add the second person.
        With udtPerson
            .strLastName = "J"
            .strFirstName = "S"
            .strPhone = "5"
            .strEMail = "s@s.ru"
        End With
        alPersons.Add(udtPerson)
        "Create the third person.
        With udtPerson
            .strLastName = "J"
            .strFirstName = "K"
            .strPhone = "5"
            .strEMail = "k@s.ru"
        End With
        "Insert the third person, but first check if they already exists.
        If Not alPersons.Contains(udtPerson) Then
            alPersons.Insert(1, udtPerson)
        End If
        "Remove the first person.
        alPersons.RemoveAt(0)
        "Display the array list values.
        Console.WriteLine("The array list contains " & alPersons.Count & " elements.")
        For Each udtPerson In alPersons
            Console.WriteLine("NAME: " & udtPerson.strFirstName & " " & udtPerson.strLastName)
        Next udtPerson

   End Sub
End class
The array list contains 2 elements.
NAME: K J
NAME: S J