Симон Робинсон - 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 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
К этому моменту мы получили представление о синтаксисе C#. Мы видели, что он позволяет писать инструкции, которые значительно короче, чем соответствующий код VB. Мы также заметили, что C# помещает весь код в исходный файл в отличие от VB, где большая часть базового кода скрыта от программиста, что делает код проще за счет уменьшения гибкости при создании приложений. Мы также познакомились с концепцией наследования.
Однако мы пока еще не видели реального примера некоторого кода, который можно написать на C#, но крайне трудно создать код, делающий то же самое на VB. Мы собираемся рассмотреть такой пример в следующем разделе, где будут с помощью некоторых классов проиллюстрированы возможности наследования.
Пример: Employees и Managers
Для этого примера предположим, что пишется приложение, делающее некоторую обработку данных, имеющих отношение к сотрудникам компании. Для нас неважно, какую обработку оно включает, больший интерес представляет факт, что для этого достаточно полезно будет написать класс C# (или модуль класса VB), представляющий сотрудников. Мы предполагаем, что это будет формировать часть программного пакета, который можно продавать компаниям, чтобы помочь им при выплате зарплаты и т.д.
Модуль класса Employee в VB
Следующий код представляет попытку закодировать модуль класса Employee
на VB. Модуль класса предоставляет два открытых свойства: EmployeeName
и Salary
, а также открытый метод GetMonthlyPayment()
, возвращающий сумму, которую компания должна платить сотруднику каждый месяц. Это не совпадает с зарплатой частично потому, что зарплата предполагается выплачиваемой за год, и частично потому, что позже будет представлена возможность прибавления других выплат компании сотруднику (таких, как бонусы за производительность):
' локальные переменные для хранения значений свойств
Private mStrEmployeeName As String ' локальная копия
Private mCurSalary As Currency ' локальная копия
Public Property Let Salary(ByVal curData As Currency)
mCurSalary = curData
End Property
Public Property Get Salary() As Currency
Salary = mCurSalary
End Property
Public Property Get EmployeeName() As String
EmployeeName = mStrEmployeeName
End Property
Public Sub Create(sEmployeeName As String, curSalary As Currency)
mStrEmployeeName = sEmployeeName
mCurSalary = curSalary
End Sub
Public Function GetMonthlyPayment() As Currency
GetMonthlyPayment = mCurSalary/12
End Function
В реальной жизни будет написано, по-видимому, что-то более сложное, но и этого класса будет достаточно для иллюстрации рассматриваемых нами концепций. Фактически мы уже имеем проблему с этим модулем класса VB — имена большинства людей меняются не очень часто, вот почему свойство EmployeeName
предназначено только для чтения. Это по-прежнему оставляет необходимость задавать имя в первый раз. Для этого добавлен метод Create
, который определяет имя и зарплату. Таким образом, процесс создания объекта сотрудника будет выглядеть так:
Dim Britney As Employee
Set Britney = New Employee
Britney.Create "Britney Spears", 20000
Эта схема работает, но она не очень удобна. Проблема с инициализацией объекта Employee
состоит в том, что хотя VB предоставляет для этой цели методы Class_Load
и Class_Initialize
, метод Class_Load
не может получать никаких параметров. Это означает, что нельзя выполнить никакой инициализации, которая является специфической для данного экземпляра Employee
, поэтому необходимо просто написать отдельный метод инициализации Create
и надеяться, что все, кто пишет клиентский код, никогда не будут забывать его вызывать. Такое решение неудобно, так как нет никакого смысла иметь объект Employee
, у которого не заданы имя и зарплата, но именно это присутствует в приведенном выше коде в течение короткого периода между созданием экземпляра Britney
и инициализацией объекта. Пока будут помнить о вызове метода Create
, все будет нормально, но здесь имеется потенциальный источник ошибок.
В C# ситуация совершенно другая. Здесь в конструкторы можно подставлять параметры (эквивалент в C# для метода Class_Load
). Необходимо только убедиться, что при определении класса Employee
в C# конструктор получает Name
и Salary
в качестве параметров. В C# можно будет написать:
Employee Britney = new Employee("Britney Spears", 20000.00M);
что значительно изящнее и менее подвержено ошибкам. Отметим кстати символ " М
", добавленный к зарплате. Это связано с тем, что эквивалент C# для типа Currency
из VB называется десятичным значением и ' M
', добавленный к числу в C#, подчеркивает, что число надо интерпретировать как decimal
. Его указывать не обязательно, но это полезно для дополнительной проверки во время компиляции.
Класс Employee в C#
Помня о приведенных выше замечаниях можно теперь представить первое определение версии C# класса Employee
(отметим, что здесь показано определение класса, а не определение содержащего его пространства имен):
class Employee {
private readonly string name;
private decimal salary;
public Employee(string name, decimal salary) {
this.name = name;
this.salary = salary;
}
public string Name {
get {
return name;
}
}
public virtual decimal Salary {
get {
return salary;
}
set {
salary = value;
}
}
public decimal GetMonthlyPayment() {
return salary/12;
}
public override string ToString() {
return "Name: " + name + ", Salary: $" + salary.ToString();
}
}
Просматривая этот код, мы видим сначала пару закрытых переменных — так называемых полей-членов, соответствующих переменным-членам в модуле класса VB. Поле name
помечено как readonly
. Мы скоро узнаем его точное значение. Грубо говоря, это гарантирует, что данное поле задано, когда создавался объект Employee
, и не может впоследствии изменяться. В C# обычно не используют "венгерский" стиль именования объектов для имен переменных, поэтому они просто называются name
и salary
, а не mStrEmployeeName
и mCurSalary
. "Венгерский" стиль именования объектов означает, что имена переменных имеют префикс из букв, который указывает их тип ( mStr
, mCur
и т.д.). Это на сегодня неважно, так как редакторы являются более развитыми и могут автоматически предоставить информацию о типах данных. Поэтому рекомендуется не использовать "венгерский" стиль именования объектов в программах C#.
В классе Employee
существует также конструктор, пара свойств — Name
и Salary
, а также два метода — GetMonthlyPayment()
и ToString()
. Все это будет рассмотрено далее.
Отметим кстати, что имена свойств Name
и Salary
отличаются только регистром символов от имен своих соответствующих полей. Это не является проблемой, так как C# различает регистр символов. Способ, которым здесь именованы свойства и поля, соответствует обычному соглашению в C# и показывает, как можно на самом деле воспользоваться различием регистра символов.
Интервал:
Закладка: