Симон Робинсон - C# для профессионалов. Том II
- Название:C# для профессионалов. Том II
- Автор:
- Жанр:
- Издательство:Лори
- Год:2003
- Город:Москва
- ISBN:5-85582-187-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Симон Робинсон - C# для профессионалов. Том II краткое содержание
Платформа .NET предлагает новую среду, в которой можно разрабатывать практически любое приложение, действующее под управлением Windows, а язык C# — новый язык программирования, созданный специально для работы с .NET.
В этой книге представлены все основные концепции языка C# и платформы .NET. Полностью описывается синтаксис C#, приводятся примеры построения различных типов приложений с использованием C# — создание приложений и служб Windows, приложений и служб WWW при помощи ASP.NET, а также элементов управления Windows и WWW Рассматриваются общие библиотеки классов .NET, в частности, доступ к данным с помощью ADO.NET и доступ к службе Active Directory с применением классов DirectoryServices.
Для кого предназначена эта книгаЭта книга предназначена для опытных разработчиков, возможно, имеющих опыт программирования на VB, C++ или Java, но не использовавших ранее в своей работе язык C# и платформу .NET. Программистам, применяющим современные технологии, книга даст полное представление о том, как писать программы на C# для платформы .NET.
Основные темы книги• Все особенности языка C#
• C# и объектно-ориентированное программирование
• Приложения и службы Windows
• Создание web-страниц и web-служб с помощью ASP NET
• Сборки .NET
• Доступ к данным при помощи ADO NET
• Создание распределённых приложений с помощью NET Remoting
• Интеграция с COM, COM+ и службой Active Directory
C# для профессионалов. Том II - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Конструктор Employee
После объявления полей в приведенном выше коде располагается "метод", имя которого — Employee
, совпадает с именем класса, то есть перед нами находится конструктор. Однако этот конструктор получает параметры и делает то же самое, что и метод Create
в версии VB — он использует параметры для инициализации полей-членов:
public Employee(string name, decimal salary) {
this.name = name;
this.salary = salary;
}
Существует потенциальная синтаксическая проблема, так как явные имена параметров совпадают с именами полей — name
и salary
. Но она разрешается с помощью использования ссылки this
, помечающей поля. Можно было бы вместо этого дать параметрам другие имена, но способ, которым это было сделано, является достаточно ясным и означает, что параметры сохраняют очевидные простые имена, которые соответствуют их значениям. Это обычный способ действий для C# в таких ситуациях.
Теперь можно объяснить точное значение квалификатора readonly
перед именем поля:
private readonly string name;
Если поле помечено как readonly
, то единственным местом, где ему может быть присвоено значение, является конструктор класса. Компилятор будет инициировать ошибку, если встретит код, который попытается изменить значение переменной readonly
, в любом месте, кроме конструктора. Это предоставляет надежную гарантию, что переменная не будет изменена, если она была задана. Невозможно сделать что-либо подобное в VB, так как VB не имеет конструкторов, которые получают параметры, поэтому переменные уровня класса в VB должны быть инициализированы с помощью методов или свойств, вызываемых после создания экземпляра объекта.
Между прочим этот конструктор не просто позволяет задать параметры для инициализации объекта Employee
— он заставляет это сделать. Если написать код следующего вида:
Employee Britney = new Employee; // неправильно
то он на самом деле не откомпилируется. Компилятор будет инициировать ошибку, так как в C# должен всегда вызываться конструктор, когда создается новый объект. Но никаких параметров задано не было, а единственный доступный конструктор требует двух параметров. Поэтому просто невозможно создать объект Employee
без каких-либо параметров. Это страхует от ошибок, вызываемых неинициализированными объектами Employee
.
Можно задать в классе более одного конструктора, чтобы выбрать, какое множество желательно использовать при создании нового объекта этого класса. Мы увидим, как это делается позже в данном приложении. Однако для этого конкретного класса единственного конструктора вполне достаточно.
Свойства класса Employee
Теперь мы переходим к свойствам Name
и Salary
. Синтаксис C# для объявления свойства существенно отличается от соответствующего синтаксиса VB, но базовые принципы одинаковы. Необходимо определить два метода доступа(accessors) соответственно для "получения" и "задания" значений свойства. В VB они синтаксически интерпретируются как методы, но в C# свойство объявляется в целом, а затем определяются методы доступа внутри определения свойства.
public decimal Salary {
get {
return salary;
}
set {
salary = value;
}
}
В VB компилятор знает, что определяется свойство, так как используется ключевое слово Property
. В C# эта информация передается тем, что за именем свойства немедленно следует открывающая фигурная скобка. Если определяется метод, то это будет открывающая скобка, указывающая начало списка параметров, в то время как для поля это будет точка с запятой, отмечающая конец определения.
Еще один момент, на который необходимо обратить внимание, состоит в том, что определения методов доступа get
и set
не содержат никаких списков параметров, это не важно. Мы знаем, что Salary
является десятичным значением, и метод доступа get
вернет десятичное значение, не используя параметры, в то время как метод доступа set
будет получать один десятичный параметр и возвращать void
. Для процедуры доступа set
этот параметр не объявляется явно, но компилятор всегда интерпретирует слово value как ссылающееся на него.
Здесь снова синтаксис определения свойств показывает, что в случае C# он является более компактным и может облегчить ввод кода.
Так же как в VB, если необходимо сделать свойство предназначенным только для чтения, то просто опускается метод доступа set
, как было сделано для свойства Name
:
public string Name {
get {
return name;
}
}
Методы класса 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# требует, чтобы переопределяемые версии методов помечались явно, и будет инициировать ошибку компиляции, если этого не сделать. Это исключает риск любых потенциальных ошибок, когда, например, мы можем случайно переопределить метод без его реализации, возможно не зная, что метод с таким именем уже присутствует в базовом классе.
Интервал:
Закладка: