VB.Net Tutorial/Class Module/Property

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

Change value in Property getter

Imports System
Module Test
  Sub Main()
    Dim p as Point = New Point()
    Console.WriteLine("(" & p.X & "," & p.Y & ")") 
    Try
      p.X = -100
      p.Y = -100
    Catch e as ArgumentOutOfRangeException
      Console.WriteLine(e.Message)
    End Try
    Console.WriteLine("(" & p.X & "," & p.Y & ")") 
  End Sub
End Module
Public Class Point
  Private yCoord as Integer
  Private xCoord as Integer
    Public Property X as Integer
      Get
        Return(xCoord * 2) 
      End Get
      Set(ByVal Value as Integer)
        xCoord = Value
      End Set
    End Property
  
  Public Property Y as Integer
    Get
      Return(yCoord)
    End Get
    Set(ByVal Value as Integer)
      yCoord = Value
    End Set
  End Property
End Class
(0,0)
(-200,-100)

Class with a property that performs validation

Module YourClassTest
   Sub Main()
      Dim obj1 As New YourClass("AAA")
      Dim obj2 As New YourClass("SSSSSSSSSSSSSSSSSSs")
      Console.WriteLine(obj1.YourName)
      Console.WriteLine(obj2.YourName)
      obj1.YourName = "asdfasdfasdfasdf"
      Console.WriteLine("obj1"s course name is: " & obj1.YourName)
      Console.WriteLine("obj2"s course name is: " & obj2.YourName)
   End Sub " Main
End Module

Public Class YourClass
   Private yourNameValue As String " course name for this YourClass
   Public Sub New(ByVal name As String)
      YourName = name " validate and store course name
   End Sub " New
   Public Property YourName() As String
      Get " retrieve yourNameValue
         Return yourNameValue
      End Get
      Set(ByVal value As String) 
         If value.Length <= 5 Then " if value has 5 or fewer characters
            yourNameValue = value " store the course name in the object
         End If
         If value.Length > 5 Then " if value has more than 5 characters
            yourNameValue = value.Substring(0, 5)
            Console.WriteLine("Name """ & value & """ exceeds maximum length (5).")
            Console.WriteLine("Limiting name to first 5 characters." & vbCrLf)
         End If
      End Set
   End Property " YourName
   Public Sub DisplayMessage()
      Console.WriteLine("Welcome to " & YourName & "!")
   End Sub " DisplayMessage
End Class
Name "SSSSSSSSSSSSSSSSSSs" exceeds maximum length (5).
Limiting name to first 5 characters.
AAA
SSSSS
Name "asdfasdfasdfasdf" exceeds maximum length (5).
Limiting name to first 5 characters.
obj1"s course name is: asdfa
obj2"s course name is: SSSSS

Convert data type in property set

Public Class YourClass
  
  Private MyState as String = "DEFAULT"
  Public Property State As String
    Get
      Return MyState
    End Get
    Set(Value As String)
      MyState = Value
    End Set
  End Property
  
End Class
Module Test
  Sub Main()
    Dim C As New YourClass()
    Console.WriteLine(C.State)
    
    C.State = 5
    
    Console.WriteLine(C.State)
    
  End Sub
End Module
DEFAULT
5

Default Property

Imports System
Imports System.Collections
Class EmployeeList
  Private mEmployees As Hashtable
  Public Sub New()
    mEmployees = New Hashtable()
  End Sub
  Public Default Property Employee(ByVal ID As Integer) As Employee
    Get
      Dim theObject As Object
      theObject = mEmployees(ID)
      Return CType(theObject, Employee)
    End Get
    Set(ByVal Value As Employee)
      mEmployees(ID) = Value
    End Set
  End Property
End Class
Class Employee
  Private mName As String
  Private mWage As Double
  Private mID As Integer
  Public Sub New(ByVal name As String, _
                 ByVal wage As Double, _
                 ByVal id As Integer)
    mName = name
    mWage = wage
    mID = id
  End Sub
  Public Property Name() As String
    Get
      Return mName
    End Get
    Set(ByVal Value As String)
      mName = Value
    End Set
  End Property
  Public ReadOnly Property Wage() As Double
    Get
      Return mWage
    End Get
  End Property
  Public ReadOnly Property ID() As Integer
    Get
      Return mID
    End Get
  End Property
  Public Sub PayRise(ByVal amount As Double)
    mWage += amount
  End Sub
  Public Overrides Function ToString() As String
    Return "[" & mID & "] " & mName & " " & mWage
  End Function
End Class

Module Test
  Sub Main()
    Dim employer As New EmployeeList()
    employer.Employee(1) = New Employee("A", 25000, 1)
    employer.Employee(2) = New Employee("J", 35000, 2)
    employer.Employee(3) = New Employee("T", 17000, 3)
    employer.Employee(4) = New Employee("E", 16500, 4)
    Dim ID As Integer
    ID = 2
    Dim who As Employee
    who = employer.Employee(ID)
    If who Is Nothing Then
      Console.WriteLine("Unrecognized ID: {0}", ID)
    Else
      Console.WriteLine("Employee details: {0}", who)
    End If
  End Sub
End Module
Employee details: [2] J 35000

Define and use a Property

Option Strict On
 Imports System
 Public Class Cat
    Private mWeight As Integer
    Public Sub New(ByVal weight As Integer)
       mWeight = weight
    End Sub
    Public Property Weight( ) As Integer
       Get
          Return mWeight
       End Get
       Set(ByVal Value As Integer)
          mWeight = Value
       End Set
    End Property
    Public Overrides Function ToString( ) As String
       Return mWeight.ToString( )
    End Function
 End Class
 Module Module1
    Sub Main( )
       Dim theVariable As New Cat(5)
       Console.WriteLine("In Run. theVariable: {0}",theVariable)
       Doubler(theVariable)
       Console.WriteLine("Back in Run. theVariable: {0}",theVariable)
    End Sub
    Public Sub Doubler(ByVal param As Cat)
       Console.WriteLine("In Method1. Received param: {0}",param)
       param.Weight = param.Weight * 2
       Console.WriteLine("Updated param. Returning new value: {0}",param)
    End Sub
 End Module
In Run. theVariable: 5
In Method1. Received param: 5
Updated param. Returning new value: 10
Back in Run. theVariable: 10

Do calculation in Property getter

Imports System
Imports System.Data.OleDb
Imports System.ruponentModel.ruponent
Class Employee
  Private MName As String
  Private MDob As DateTime
  Private MCompany As String
  Public Sub New(ByVal name As String, ByVal dob As DateTime)
    MName = name
    MDob = dob
    MCompany = "ABC"
  End Sub
  Public Property Name() As String
    Get
      Return MName
    End Get
    Set(ByVal Value As String)
      MName = Value
    End Set
  End Property
  Public ReadOnly Property Age() As Integer
    Get
      Dim today As DateTime = DateTime.Now
      Dim Years As Integer = DateTime.Now.Year - mDob.Year
      If (today.Month < MDob.Month) Or _
         (today.Month = MDob.Month And _ 
          today.Day < MDob.Day) Then
        Years -= 1
      End If
      Return years
    End Get
  End Property
End Class
Module Test
  Sub Main()
    Dim AEmployee As New Employee("A", New DateTime(1964, 12, 3))
    Console.WriteLine("{0} is {1}", AEmployee.Name, AEmployee.Age)
  End Sub
End Module
A is 42

Do data check in property set

public class Test
   public Shared Sub Main
        Dim objMyObject As YourClass
        objMyObject = New YourClass()
        Console.WriteLine(objMyObject.AddTwoNumbers(1, 2))
        objMyObject = Nothing
   End Sub
End Class
Public Class YourClass
    Private m_intHeight As Integer
    
    Public Property Height() As Integer
        Get
            Return m_intHeight
        End Get
        Set(ByVal value As Integer)
            If m_intHeight < 10 Then Exit Property
            m_intHeight = value
        End Set
    End Property
    Public Function AddTwoNumbers(ByVal intNumber1 As Integer, _
                                  ByVal intNumber2 As Integer) As Long
        AddTwoNumbers = intNumber1 + intNumber2
    End Function
End Class
3

Friend Property

Imports System
Module Test
  Sub Main()
    Dim acct As New Account()
    Console.WriteLine(acct.AccountHolder)
    Dim cAcct As New CheckingAccount()
    Console.WriteLine(cAcct.AccountHolder)
  End Sub
End Module
Public Class CheckingAccount
  Inherits Account
  Sub New()
    MyBase.New
    Console.WriteLine(MyBase.retrieved) 
    Console.WriteLine(MyBase.AccountHolder)
  End Sub
End Class
Public Class Account
  Protected retrieved As DateTime
  Private acctHolder As String
  
  Public Sub New()
    retrieved = DateTime.Now()
    acctHolder = "DEFAULT"
  End Sub
  
  Friend Property AccountHolder As String
    Get
      Return acctHolder
    End Get
    Set(ByVal Value As String) 
      acctHolder = Value
    End Set
  End Property
End Class
DEFAULT
11/05/2007 12:22:44 PM
DEFAULT
DEFAULT

Loop through two dimensional array with GetUpperBound and GetLowerBound

Imports System.Collections
public class Test
   public Shared Sub Main
        Dim i As Integer
        Dim j As Integer
               Dim myArray4(2, 2) As Object             "2 dimensional array with 9 elements
               For i = myArray4.GetLowerBound(0) To myArray4.GetUpperBound(0)
                       For j = myArray4.GetLowerBound(1) To myArray4.GetUpperBound(1)
                myArray4(i, j) = i + j
                       Next
               Next
               For i = myArray4.GetLowerBound(0) To myArray4.GetUpperBound(0)
                       For j = myArray4.GetLowerBound(1) To myArray4.GetUpperBound(1)
                               Console.WriteLine(myArray4(i, j))
                       Next
               Next
   End Sub
End class
0
1
2
1
2
3
2
3
4

MultiKey Properties

Imports System
Imports System.Collections
Class Employee
  Private MName As String
  Private MWage As Double
  Public Sub New(ByVal Name As String, ByVal Wage As Double)
    MName = Name
    MWage = Wage
  End Sub
  Public Property Name() As String
    Get
      Return MName
    End Get
    Set(ByVal Value As String)
      MName = Value
    End Set
  End Property
  Public ReadOnly Property Wage() As Double
    Get
      Return MWage
    End Get
  End Property
  Public Sub PayRaise(ByVal Amount As Double)
    MWage += Amount
  End Sub
  Public Overrides Function ToString() As String
    Return MName & " " & MWage
  End Function
End Class
Class EmployeeList
  Private MEmployees As Hashtable
  Public Sub New()
    MEmployees = New Hashtable()
  End Sub
  Public Property Employee(ByVal Location As String, ByVal ID As Integer) As Employee
    Get
      Dim Key As String = Location + ID.ToString()
      Return MEmployees(Key)
    End Get
    Set(ByVal Value As Employee)
      Dim Key As String = Location + ID.ToString()
      MEmployees(Key) = Value
    End Set
  End Property
End Class
Module Test
  Sub Main()
    Dim EmployeeList As New EmployeeList()
    EmployeeList.Employee("A", 1) = New Employee("S", 2)
    EmployeeList.Employee("B", 2) = New Employee("C", 3)
    EmployeeList.Employee("C", 3) = New Employee("B", 1)
    EmployeeList.Employee("D", 4) = New Employee("A", 1)
    Dim Who As Employee
    Who = EmployeeList.Employee("Boston", 200)
    Console.WriteLine("{0}", Who)
    Who = EmployeeList.Employee("Geneva", 200)
    Console.WriteLine("{0}", Who)
  End Sub
End Module

Overloaded Properties

Imports System
Imports System.Collections
Class Employee
  Public Name As String
  Public Wage As Double
  Public ID As Integer
  Public Sub New(ByVal N As String, ByVal W As Double, ByVal I As Integer)
     Name = N
     Wage = W
     ID = I
  End Sub
  Public Sub PayRaise(ByVal Amount As Double)
    Wage += Amount
  End Sub

  Public Overrides Function ToString() As String
    Return "[" & ID & "]" & " " & Name & " " & Wage
  End Function
End Class
Class EmployeeList
  Private idTable As Hashtable
  Private nameTable As Hashtable
  
  Public Sub New()
    idTable = New Hashtable()
    nameTable = New Hashtable()
  End Sub
  Public Property Employee(ByVal ID As Integer) As Employee
    Get
      Return idTable(ID)
    End Get
    Set(ByVal Value As Employee)
      idTable(ID) = Value
    End Set
  End Property
  Public Property Employee(ByVal Name As String) As Employee
    Get
      Return nameTable(name)
    End Get
    Set(ByVal Value As Employee)
      nameTable(Name) = Value
    End Set
  End Property
End Class
Module Test
  Sub Main()
    Dim EmployeeList As New EmployeeList()
    EmployeeList.Employee(1) = New Employee("A", 250, 100)
    EmployeeList.Employee(2) = New Employee("B", 350, 200)
    EmployeeList.Employee(3) = New Employee("C", 170, 300)
    EmployeeList.Employee(4) = New Employee("D", 165, 400)
    EmployeeList.Employee("N") = New Employee("N", 50000, 500)
    EmployeeList.Employee("C") = New Employee("C", 60000, 600)
    Dim ID As Integer = 1
    Dim Who As Employee
    Who = EmployeeList.Employee(ID)
    If Who Is Nothing Then
      Console.WriteLine("Unrecognized ID: {0}", ID)
    Else
      Console.WriteLine("Employee details: {0}", Who)
    End If
    Dim Name As String = "N"
    Who = EmployeeList.Employee(Name)
    If Who Is Nothing Then
      Console.WriteLine("Unrecognized name: {0}", Name)
    Else
      Console.WriteLine("Employee details: {0}", Who)
    End If
  End Sub
End Module
Employee details: [100] A 250
Employee details: [500] N 50000

Properties with Getter and Setter

Public Class Tester
    Public Shared Sub Main
      Dim time As New CTime3()
      " add one second
      time.Second = (time.Second + 1) Mod 60
      " add one minute if 60 seconds have passed
      If time.Second = 0 Then
         time.Minute = (time.Minute + 1) Mod 60
         " add one hour if 60 minutes have passed
         If time.Minute = 0 Then
            time.Hour = (time.Hour + 1) Mod 24
         End If
      End If
      time.Hour = 1
      time.Minute = 2
      time.Second = 3
      Console.WriteLine("Hour: " & time.Hour & "; Minute: " & _
         time.Minute & "; Second: " & time.Second)
    End Sub
End Class
Class CTime3
   Inherits Object
   Private mHour As Integer
   Private mMinute As Integer
   Private mSecond As Integer
   Public Sub New()
   End Sub " New
   " property Hour
   Public Property Hour() As Integer
      " return mHour value
      Get
         Return mHour
      End Get
      " set mHour value
      Set(ByVal value As Integer)
         If (value >= 0 AndAlso value < 24) Then
            mHour = value
         Else
            mHour = 0
         End If
      End Set
   End Property " Hour
   " property Minute
   Public Property Minute() As Integer
      " return mMinute value
      Get
         Return mMinute
      End Get
      " set mMinute value
      Set(ByVal value As Integer)
         If (value >= 0 AndAlso value < 60) Then
            mMinute = value
         Else
            mMinute = 0
         End If
      End Set
   End Property " Minute
   " property Second
   Public Property Second() As Integer
      " return mSecond value
      Get
         Return mSecond
      End Get
      " set mSecond value
      Set(ByVal value As Integer)
         If (value >= 0 AndAlso value < 60) Then
            mSecond = value
         Else
            mSecond = 0
         End If
      End Set
   End Property " Second
End Class
Hour: 1; Minute: 2; Second: 3

Readable and Writable

Imports System
Class Employee
  Private MName As String
  Private MDob As DateTime
  Private MEmailAlias As String
  Public Sub New(ByVal Name As String, ByVal Dob As DateTime)
    MName = Name
    MDob = Dob
  End Sub
  Public Property Name() As String
    Get
      Return MName
    End Get
    Set(ByVal Value As String)
      MName = Value
    End Set
  End Property
  Public ReadOnly Property Brithday() As DateTime
    Get
      Return MDob
    End Get
  End Property
  Public WriteOnly Property EmailAlias() As String
    Set(ByVal Value As String)
      MEmailAlias = Value
    End Set
  End Property
  Public ReadOnly Property EmailAddress() As String
    Get
      Return MEmailAlias & "@a.ru"
    End Get
  End Property
End Class
Module ReadableAndWritable
  Sub Main()
    Dim emp As New Employee("T", New DateTime(1997, 7, 2))
    emp.Name = "T"
    Console.WriteLine("Name: {0}", emp.Name)
    Console.WriteLine("Date of birth: {0}", emp.Brithday.ToLongDateString)
    emp.EmailAlias = "AAA"
    Console.WriteLine("Email address: {0}", emp.EmailAddress)
  End Sub
End Module
Name: T
Date of birth: July 2, 1997
Email address: AAA@a.ru

ReadOnly property

Option Strict On
Public Class YourClass
   Private yourName As String
   Private yourNumber As Decimal
   Public Sub New(breed As String)
      yourName = breed
   End Sub
   Public ReadOnly Property Name() As String
      Get
         Return yourName
      End Get
   End Property
   Public Property Number() As Decimal
      Get
         Return yourNumber
      End Get
      Set
         yourNumber = CDec(value)
      End Set
   End Property
   Public Sub ShowInfo()
      Console.WriteLine("This " & yourName & " weighs " & yourNumber & " pounds.")
   End Sub
End Class
Public Class Tester
   Public Shared Sub Main()
      Dim mal As New YourClass("A")
      mal.Number = 130
      ChangeYourClassInfo(mal)
      mal.ShowInfo
      CompletelyChangeYourClassInfo(mal)
      mal.ShowInfo
   End Sub
   Public Shared Sub ChangeYourClassInfo(ByVal aYourClass As YourClass)
      aYourClass.Number = 125
   End Sub
   Public Shared Sub CompletelyChangeYourClassInfo(ByVal aYourClass As YourClass)
      Dim newf As New YourClass("Newfoundland")
      aYourClass = newf
   End Sub
End Class
This A weighs 125 pounds.
This A weighs 125 pounds.

Shared Properties

Imports System
Class Person
  Private Shared MDomain As String
  Private Name As String
  Private Birthday As DateTime
  Private EmailAlias As String
  Public Shared Property Domain() As String
    Get
      Return MDomain
    End Get
    Set(ByVal Value As String)
      MDomain = Value
    End Set
  End Property
  Public Sub New(ByVal N As String, ByVal Dob As DateTime)
    Name = N
    Birthday = Dob
  End Sub
End Class
Module Test
  Sub Main()
    Dim APerson As New Person("P", New DateTime(1997, 7, 2))
    Person.Domain = "My.ru"
  End Sub
End Module

Shared variable and Shared Property

Module Tester
   Sub Main()
      Console.WriteLine("Employees before instantiation: " & _
         Employee.Count)
      Dim employee1 As Employee = New Employee("S", "B")
      Dim employee2 As Employee = New Employee("B", "J")
      Console.WriteLine("Employee.Count: " & Employee.Count)
      employee1 = Nothing
      employee2 = Nothing
      System.GC.Collect() " request garbage collection
      
      Console.WriteLine("Employee.Count: " & Employee.Count)
      
   End Sub " Main
End Module
Class Employee
   Inherits Object
   Private mFirstName As String
   Private mLastName As String
   Private Shared mCount As Integer
   Public Sub New(ByVal firstNameValue As String, _
      ByVal lastNameValue As String)
      mFirstName = firstNameValue
      mLastName = lastNameValue
      mCount += 1 
      Console.WriteLine _
         ("Employee object constructor: " & mFirstName & _
         " " & mLastName)
   End Sub " New
   Protected Overrides Sub Finalize()
      mCount -= 1 " decrement mCount, resulting in one fewer object
      Console.WriteLine _
         ("Employee object finalizer: " & mFirstName & _
         " " & mLastName & "; count = " & mCount)
   End Sub " Finalize
   Public ReadOnly Property FirstName() As String
      Get
         Return mFirstName
      End Get
   End Property " FirstName
   " return last name
   Public ReadOnly Property LastName() As String
      Get
         Return mLastName
      End Get
   End Property " LastName
   " property Count
   Public Shared ReadOnly Property Count() As Integer
      Get
         Return mCount
      End Get
   End Property " Count
End Class
Employees before instantiation: 0
Employee object constructor: S B
Employee object constructor: B J
Employee.Count: 2
Employee object finalizer: B J; count = 1
Employee object finalizer: S B; count = 0
Employee.Count: 0

Single Indexed Property

Imports System
Imports System.Collections
Class Employee
  Public Name As String
  Public Wage As Double
  Public Sub New(ByVal N As String, ByVal W As Double)
    Name = N
    Wage = W
  End Sub
    Public Sub PayRaise(ByVal Amount As Double)
        Wage += Amount
    End Sub
    Public Overrides Function ToString() As String
        Return Name & " " & Wage
    End Function
End Class
Class Employer
  Private MEmployees As Hashtable
  Public Sub New()
    MEmployees = New Hashtable()
  End Sub
  Public Property Employee(ByVal ID As Integer) As Employee
    Get
      Dim TheObject As Object
      TheObject = MEmployees.Item(ID)
      Return CType(TheObject, Employee)
    End Get
    Set(ByVal Value As Employee)
      MEmployees.Item(ID) = Value
    End Set
  End Property
End Class
Module Test
  Sub Main()
    Dim Employer As New Employer()
    Employer.Employee(1) = New Employee("A", 25000)
    Employer.Employee(2) = New Employee("J", 35000)
    Employer.Employee(3) = New Employee("T", 17000)
    Employer.Employee(4) = New Employee("E", 16500)
    Dim ID As Integer = 3
    Dim Who As Employee
    Who = employer.Employee(ID)
    If Who Is Nothing Then
      Console.WriteLine("Unrecognized ID: {0}", ID)
    Else
      Console.WriteLine("Employee details: {0}", Who)
    End If
  End Sub
End Module
Employee details: T 17000

Throw Exception in Property setting

Imports System
Module Test
  Sub Main()
    
    Dim p as Point = New Point()
    
    Console.WriteLine("(" & p.X & "," & p.Y & ")") 
    
    Try
      p.X = -100
      p.Y = -100
    Catch e as ArgumentOutOfRangeException
      Console.WriteLine(e.Message)
    End Try
    
    Console.WriteLine("(" & p.X & "," & p.Y & ")") 
  End Sub
End Module
Public Class Point
  Private yCoord as Integer
  Private xCoord as Integer
  Public Property X as Integer
    Get
      Return xCoord
    End Get
    Set(ByVal Value as Integer)
      If Value < 0 then
        Throw New ArgumentOutOfRangeException("Value","X Coordinate must be greater than 0")
      End If
      xCoord = Value
    End Set
  End Property
  
  Public Property Y as Integer
    Get
      Return(yCoord)
    End Get
    Set(ByVal Value as Integer)
      If Value < 0 then 
        Throw new ArgumentOutOfRangeException("Value","Y Coordinate must be greater than 0")
      End If
      yCoord = Value
    End Set
  End Property
End Class
(0,0)
X Coordinate must be greater than 0
Parameter name: Value
(0,0)

Two properties

Imports System
Imports System.Collections
Class EmployeeList
  Private mEmployees As Hashtable
  Private mLevels As Hashtable
  Public Sub New()
    mEmployees = New Hashtable()
    mLevels = New Hashtable()
  End Sub
  Public Default Property Employee(ByVal ID As Integer) As Employee
    Get
      Dim theObject As Object
      theObject = mEmployees(ID)
      Return CType(theObject, Employee)
    End Get
    Set(ByVal Value As Employee)
      mEmployees(ID) = Value
    End Set
  End Property
  Public Property Level(ByVal country As String) As String
    Get
      Dim theObject As Object
      theObject = mLevels(country)
      Return CType(theObject, String)
    End Get
    Set(ByVal Value As String)
      mLevels(country) = Value
    End Set
  End Property
End Class

Class Employee
  Private mName As String
  Private mWage As Double
  Private mID As Integer
  Public Sub New(ByVal name As String, ByVal wage As Double,ByVal id As Integer)
    mName = name
    mWage = wage
    mID = id
  End Sub
  Public Property Name() As String
    Get
      Return mName
    End Get
    Set(ByVal Value As String)
      mName = Value
    End Set
  End Property
  Public ReadOnly Property Wage() As Double
    Get
      Return mWage
    End Get
  End Property
  Public ReadOnly Property ID() As Integer
    Get
      Return mID
    End Get
  End Property
  Public Sub PayRise(ByVal amount As Double)
    mWage += amount
  End Sub
  Public Overrides Function ToString() As String
    Return "[" & mID & "] " & mName & " " & mWage
  End Function
End Class
Module DefaultProperty
  Sub Main()
    Dim employer As New EmployeeList()
    employer(1) = New Employee("A", 25, 1)
    employer(2) = New Employee("J", 35, 2)
    employer(3) = New Employee("T", 17, 3)
    employer(4) = New Employee("E", 16, 4)
    employer.Level("AA") = "A"
    employer.Level("BB") = "B"
    employer.Level("CC") = "C"
    employer.Level("DD") = "D"
    employer.Level("EE") = "E"
    employer.Level("FF") = "F"
    Dim country As String
    country = "AA"
    Dim city As String
    city = employer.Level(country)
    If city Is Nothing Then
      Console.WriteLine("No office in {0}", country)
    Else
      Console.WriteLine("Level in {0}: {1}", country, city)
    End If
  End Sub
End Module
Level in AA: A

Use Property to set private data

Module Module1
    Sub Main()
        Dim TheObject As New TheClass
        Console.WriteLine("ThePublicData holds """ & TheObject.ThePublicData & """")
        Console.WriteLine("TheMethod returns """ & TheObject.TheMethod() & """")
        Console.WriteLine("TheProperty holds """ & TheObject.TheProperty & """")
    End Sub
End Module
Class TheClass
    Public ThePublicData = "Hello there!"
    Private TheInternalData As String = "Hello there!"
    Function TheMethod() As String
        Return "Hello there!"
    End Function
    Public Property TheProperty() As String
        Get
            Return TheInternalData
        End Get
        Set(ByVal Value As String)
            TheInternalData = Value
        End Set
    End Property
End Class
ThePublicData holds "Hello there!
TheMethod returns "Hello there!
TheProperty holds "Hello there!