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



Гостиница Волхов 2

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


Метод 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)



Содержание  Назад  Вперед