VB.Net/Language Basics/Structure

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

Compare Structure and Class

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

   Shared Sub Main(ByVal args As String())
       Dim cperson1 As New ClassPerson
       Dim cperson2 As ClassPerson
       cperson1.FirstName = "A"
       cperson2 = cperson1
       cperson2.FirstName = "B"
       Console.WriteLine(cperson1.FirstName & ", " & cperson2.FirstName)
       Dim sperson1 As New StructurePerson
       Dim sperson2 As StructurePerson
       sperson1.FirstName = "A"
       sperson2 = sperson1
       sperson2.FirstName = "B"
       Console.WriteLine(sperson1.FirstName & ", " & sperson2.FirstName)
   End Sub

End Class

Public Class ClassPerson

   Public FirstName As String
   Public LastName As String

End Class Public Structure StructurePerson

   Public FirstName As String
   Public LastName As String

End Structure


      </source>


Pass Structure into a Function

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

   Shared Sub Main(ByVal args As String())
       " create an instance of the structure
       Dim loc1 As New Location(200, 300)
       " display the values in the structure
       Console.WriteLine("Loc1 location: {0}", loc1)
       " invoke the default constructor
       Dim loc2 As New Location( )
       Console.WriteLine("Loc2 location: {0}", loc2)
       " pass the structure to a method
       myFunc(loc1)
       " redisplay the values in the structure
       Console.WriteLine("Loc1 location: {0}", loc1)
   End Sub
        " method takes a structure as a parameter
   Shared Public Sub myFunc(ByVal loc As Location)
       " modify the values through the properties
       loc.XVal = 50
       loc.YVal = 100
       Console.WriteLine("Loc1 location: {0}", loc)
   End Sub "myFunc

End Class Public Structure Location

   " the Structure has private data
   Private myXVal As Integer
   Private myYVal As Integer
   " constructor
   Public Sub New( _
      ByVal xCoordinate As Integer, ByVal yCoordinate As Integer)
       myXVal = xCoordinate
       myYVal = yCoordinate
   End Sub "New
   " property
   Public Property XVal( ) As Integer
       Get
           Return myXVal
       End Get
       Set(ByVal Value As Integer)
           myXVal = Value
       End Set
   End Property
   Public Property YVal( ) As Integer
       Get
           Return myYVal
       End Get
       Set(ByVal Value As Integer)
           myYVal = Value
       End Set
   End Property
   " Display the structure as a String
   Public Overrides Function ToString( ) As String
       Return [String].Format("{0}, {1}", xVal, yVal)
   End Function "ToString

End Structure "Location

      </source>


Simple Structure Demo

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

   Shared Sub Main()
       "Declare a Customer object
       Dim objNewCustomer As Customer
       "Create the new customer
       objNewCustomer.FirstName = "f"
       objNewCustomer.LastName = "l"
       objNewCustomer.Email = "e"
       
       System.Console.WriteLine(objNewCustomer)
   End Sub

End Class Public Structure Customer

   "Public members
   Public FirstName As String
   Public LastName As String
   Public Email As String
   "Name property
   Public ReadOnly Property Name() As String
       Get
           Return FirstName & " " & LastName
       End Get
   End Property
   """ <summary>
   """ Overrides the default ToString method
   """ </summary>
   """ <returns>String</returns>
   """ <remarks>Returns the customer name and email address</remarks>
   Public Overrides Function ToString() As String
       Return Name & " (" & Email & ")"
   End Function

End Structure

      </source>


Store Structure into a Collection

<source lang="vbnet"> Imports System Imports System.Data Imports System.Collections Imports System.Windows.Forms Public Class MainClass

   Shared Sub Main()
       Dim customers As CustomerCollection = New CustomerCollection()
       customers.Clear()
       
       Dim newCustomer As Customer
       newCustomer.FirstName = "firstName"
       newCustomer.LastName = "lastName"
       newCustomer.Email = "email"
       " add it to the list...
       customers.Add(newCustomer)


   End Sub

End Class Public Structure Customer

   Public FirstName As String
   Public LastName As String
   Public Email As String
   Public ReadOnly Property Name() As String
       Get
           Return FirstName & " " & LastName
       End Get
   End Property
   Public Overrides Function ToString() As String
       Return Name & " (" & Email & ")"
   End Function
   Public Function IsEmpty() As Boolean
       If FirstName = "" Then
           Return True
       Else
           Return False
       End If
   End Function

End Structure Public Class CustomerCollection

   Inherits System.Collections.CollectionBase
   Private _emailHashtable As New Hashtable()
   Public Sub Add(ByVal newCustomer As Customer)
       Me.List.Add(newCustomer)
       Dim useEmail As String
       useEmail = newCustomer.Email.ToLower
       EmailHashtable.Add(useEmail, newCustomer)
   End Sub
   Public Sub Remove(ByVal removeCustomer As Customer)
       Me.List.Remove(removeCustomer)
       Dim useEmail As String
       useEmail = removeCustomer.Email.ToLower()
       EmailHashtable.Remove(useEmail)
   End Sub
   Default Public Property Item(ByVal index As Integer) As Customer
       Get
           Return Me.List.Item(index)
       End Get
       Set(ByVal Value As Customer)
           Me.List.Item(index) = Value
       End Set
   End Property
   Public ReadOnly Property EmailHashtable() As Hashtable
       Get
           Return _emailHashtable
       End Get
   End Property
   Default Public ReadOnly Property Item(ByVal email As String) _
           As Customer
       Get
           email = email.ToLower()
           Return EmailHashtable.Item(email)
       End Get
   End Property
   Public Shadows Sub Clear()
       MyBase.Clear()
       EmailHashtable.Clear()
   End Sub
   Public Shadows Sub RemoveAt(ByVal index As Integer)
       Remove(Item(index))
   End Sub

End Class

      </source>


Structure overrides ToString method

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

   Shared Sub Main()
       Dim loc1 As Location  
       loc1.XVal = 75
       loc1.YVal = 225
       " display the values in the structure
       Console.WriteLine("Loc1 location: {0}", loc1)
   End Sub

End Class

     Public Structure Location
        Private myXVal As Integer
        Private myYVal As Integer
        Public Sub New( _
           ByVal xCoordinate As Integer, ByVal yCoordinate As Integer)
            myXVal = xCoordinate
            myYVal = yCoordinate
        End Sub "New
        Public Property XVal(  ) As Integer
            Get
                Return myXVal
            End Get
            Set(ByVal Value As Integer)
                myXVal = Value
            End Set
        End Property
        Public Property YVal(  ) As Integer
            Get
                Return myYVal
            End Get
            Set(ByVal Value As Integer)
                myYVal = Value
            End Set
        End Property
        Public Overrides Function ToString(  ) As String
            Return String.Format("{0}, {1}", XVal, YVal)
        End Function 
    End Structure 
          
      </source>


Structure Variable assignment

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

  Shared Sub Main()
       Dim S1 As New StringStructure("Hello")
       Dim S2 As StringStructure
       S2 = S1
       S2.SetString("Modified")
       Console.WriteLine("Struct: " + S1.AString)
  End Sub

End Class

Public Structure StringStructure

   Public AString As String
   Public Sub SetString(ByVal newstring As String)
       AString = newstring
   End Sub
   Public Sub New(ByVal InitialString As String)
       AString = InitialString
   End Sub

End Structure

      </source>


Structure with Constructor

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

   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
   Shared Public Sub myFunc(ByVal loc As Location)
       loc.XVal = 50
       loc.YVal = 100
       Console.WriteLine("Loc1 location: {0}", loc)
   End Sub

End Class

     " declare a Structure named Location
    Public Structure Location
        " the structure has private data
        Private myXVal As Integer
        Private myYVal As Integer
        " constructor
        Public Sub New( _
           ByVal xCoordinate As Integer, ByVal yCoordinate As Integer)
            myXVal = xCoordinate
            myYVal = yCoordinate
        End Sub "New
        " property
        Public Property XVal(  ) As Integer
            Get
                Return myXVal
            End Get
            Set(ByVal Value As Integer)
                myXVal = Value
            End Set
        End Property
        Public Property YVal(  ) As Integer
            Get
                Return myYVal
            End Get
            Set(ByVal Value As Integer)
                myYVal = Value
            End Set
        End Property
        " Display the structure as a String
        Public Overrides Function ToString(  ) As String
            Return String.Format("{0}, {1}", xVal, yVal)
        End Function "ToString
    End Structure "Location
          
      </source>


ToString Method for Structure data type

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

  Shared Sub Main()
       Dim a As StringStructure
       a.SetString("Hello")
       Dim b As StringStructure = a
       Console.WriteLine("B"s String: " + b.AString)
       Dim c As New StringStructure("Another string")
       Console.WriteLine("C"s String: " + c.AString)
       Console.WriteLine("C"s ToString: " + c.ToString())
       Dim obj As Object
       obj = c
       Console.WriteLine(obj.ToString())
  End Sub

End Class

Public Structure StringStructure

   Public AString As String
   Public Sub SetString(ByVal newstring As String)
       AString = newstring
   End Sub
   Public Sub New(ByVal InitialString As String)
       AString = InitialString
   End Sub

End Structure

      </source>