Перегрузка членов класса
Метод RaiseSalary класса Employee можно сделать и поинтереснее. Предположим, повышения зарплаты до 10% происходят автоматически, но для больших сумм требуется специальный пароль. В прежних версиях VB такие задачи решались при помощи необязательных параметров. Хотя эта возможность сохранилась и в VB.NET, существует более изящное решение с определением двух версий RaiseSalary. Используя возможность перегрузки методов, мы определяем два разных метода для разных случаев.
В VB.NET синтаксис перегрузки методов очень прост: для этого в программе просто определяются два метода с одинаковыми именами и разными параметрами. Тем не менее мы настоятельно рекомендуем использовать ключевое слово OverLoads. По нему пользователи вашего кода узнают о том, что метод перегружается намеренно, а не в результате ошибки. В следующем фрагменте приведены две версии метода 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 IfEnd 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
Примечание
При перегрузке методы класса различаются только по типам параметров. Методы не могут перегружаться по типу возвращаемого значения или уровню доступа.
Ниже приведен пример класса Employee с перегруженным методом RaiseSalany, а также небольшая тестовая программа. Обратите внимание: 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