Книга: C# для профессионалов. Том II
Методы класса Employee
Методы класса Employee
В классе Employee
существуют два метода — GetMonthlySalary()
и ToString()
.
GetMonthlySalary()
не требует комментариев, так как большая часть соответствующего синтаксиса C# уже была рассмотрена. Берется зарплата, делится на 12 для преобразования из годовой в месячную зарплату, и возвращается результат:
public decimal GetMonthlyPayment() {
return salary/12;
}
Единственным новым элементом синтаксиса здесь является инструкция return
. В VB возвращаемое из метода значение определяют, задавая требуемое значение фиктивной переменной, которая имеет такое же имя, как и функция
GetMonthlyPayment = mCurSalary/12
В C# тот же самый результат получают, добавляя параметр в инструкцию return
(без скобок). Также return
в C# определяет, что происходит выход их функции, поэтому инструкция C#:
return salary/12;
эквивалентна в действительности следующему коду VB:
GetMonthlyPayment = mCurSalary/12
Exit Function
Метод ToString()
более интересен. В большинстве случаев при написании класса C# будет полезным создание метода ToString()
, который может использоваться для получения быстрого просмотра содержимого объекта. Как упоминалось ранее, метод ToString()
уже доступен, так как все классы наследуют его от System.Object
. Однако версия в System.Object
выводит только имя класса и никаких данных из экземпляра класса. Компания Microsoft уже переопределила этот метод для всех числовых типов данных (int
, float
и т.д.), чтобы выводить реальные значения переменных, и нелишне будет сделать то же самое для собственных классов программиста. В любом случае это может быть полезно для просмотра содержимого объекта во время отладки:
publiс override string ToString() {
return Name: " + name + ", Salary: $" + salary.ToString();
}
Эта переопределенная версия выводит имя и зарплату сотрудника. Новым элементом синтаксиса является то, что метод специально объявлен как override
. C# требует, чтобы переопределяемые версии методов помечались явно, и будет инициировать ошибку компиляции, если этого не сделать. Это исключает риск любых потенциальных ошибок, когда, например, мы можем случайно переопределить метод без его реализации, возможно не зная, что метод с таким именем уже присутствует в базовом классе.
Мы завершили пример класса Employee
как в VB, так и в C#, и до сих пор, хотя имеются некоторые неровности в создании и инициализации экземпляра Employee
в версии VB, оба языка справились достаточно хорошо с требованиями. Однако одна из целей этого приложения состоит в том, чтобы показать, почему C# может быть в отдельных ситуациях значительно более мощным, чем VB6. Мы будем добавлять некоторые свойства в версию C# нашего примера, которые оставят VB далеко позади. Начнем со статических полей и свойств.
- Конструктор Employee
- Пример: Employees и Managers
- Определение открытого интерфейса класса
- Инкапсуляция на основе свойств класса
- Класс Employee в C#
- Свойства класса Employee
- Модуль класса Employee в VB
- Наследование от класса Employee
- Статические члены
- Передача вызовов конструктора с помощью this
- Управление созданием базовых классов с помощью base
- Ограничение родового параметра