Иллюстрированный самоучитель по VB.NET

Перегрузка членов класса


Метод RaiseSalary класса Employee можно сделать и поинтереснее. Предположим, повышения зарплаты до 10% происходят автоматически, но для больших сумм требуется специальный пароль. В прежних версиях VB такие задачи решались при помощи необязательных параметров. Хотя эта возможность сохранилась и в VB .NET, существует более изящное решение с определением двух версий RaiseSalary. Используя возможность перегрузки методов, мы определяем два разных метода для разных случаев.

В VB .NET синтаксис перегрузки методов очень прост: для этого в программе просто определяются два метода с одинаковыми именами и разными параметрами. Тем не менее мы настоятельно рекомендуем использовать ключевое слово Over! oads. По нему пользователи вашего кода узнают о том, что метод перегружается намеренно, а не в результате ошибки. В следующем фрагменте приведены две версии метода RaiseSalary, о которых говорилось выше:

Public Overloads Sub RaiseSalary(ByVal Percent As Decimal)

If Percent > 0.1 Then

' Операция запрещена - необходим пароль

Console.WhteLineC'MUST HAVE PASSWORD TO RAISE SALARY " & _

"MORE THAN 10*!!!!") Else X

m_Salary =(1 + Percent) * m_salary End If End Sub

Public Overloads

Sub RaiseSalary(ByVal Percent As Decimal._

ByVal Password As Stqng)

If Password -"special Then

m_Salary = (1 + Percent) * m_Salary



End If End Sub

При перегрузке методы класса различаются только по типам параметров. Методы не могут перегружаться по типу возвращаемого значения или уровню доступа.

Ниже приведен пример класса Empl oyee с перегруженным методом Rai seSalany, а также небольшая тестовая программа. Обратите внимание: 10%-ный порог не кодируется в программе, а определяется в виде константы:

Option Strict On Module Modulel Sub Main()

Dim Tom As New Employee("Tom". 100000)

Console.WhteLineCTom.TheName & " has salary " & Tom.Salary)

Tom.RaiseSalary(0.2D)

' Суффикс D - признак типа Decimal

Console.WriteLine(Tom.TheName & " still has salary " & Tom.Salary)



Console. WhteLine()

Dim Sally As New Employee("Sally", 150000)

Console.WriteLine(Sally.TheName & " has salary " & Sally.Salary)

Sally.RaiseSalary(0.2D,"special")

' Суффикс D - признак типа Decimal

Console.WriteLine(Sally.TheName & "has salary "SSally.Salary)

Console. WriteLine()

Console.WriteLine("Please press the Enter key")

Console. ReadLine()

End Sub

End Module

Public Class Employee

Private m_Name As String

Private m_Salary As Decimal

Private Const LIMIT As Decimal = 0.1D

Public Sub New(ByVal theName As String,ByVal curSalary As Decimal)

m_Name = thename

m_Salary = curSalary

End Sub

Readonly Property TheName()As String Get

Return m_Name

End Get '

End Property

Readonly Property Salary()As Decimal Get

Return m_Salary

End Get

End Property

Public Overloads

Sub RaiseSalary(ByVal Percent As Decimal)

If Percent > LIMIT Then

' Операция запрещена - необходим пароль

Console.WriteLine("MUST HAVE PASSWORD TO RAISE SALARY " & _

"MORE THAN LIMIT!!!!")

Else

m_Salary =(1 +Percent)*m_salary End If End Sub

Public Overloads

Sub RaiseSalary(ByVal Percent As Decimal._

ByVal Password As String)

If Password = "special" Then

m_Salary =(1 + Percent) * m_Salary

End If

End Sub

End Class




Содержание раздела