Симон Робинсон - 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# классы всегда доступны по ссылке (что эквивалентно доступу через указатель в C++).
Если в C++ требуется, чтобы функция была виртуальной необходимо просто определить ключевое слово virtual
в базовом и производном классах. В противоположность этому в C# необходимо объявить функцию как virtual
в базовом классе и как override
в версиях производных классов.
class MyBaseClass {
public virtual void DoSomething(int X) {
// и т.д.
}
// и т.д.
}
class MyClass : MyBaseClass {
public override void DoSomething(int X) {
// и т.д.
}
// и т.д.
}
Важный момент этого синтаксиса состоит в том, что он дает понять компилятору, как интерпретировать функцию, и значит, исключается риск таких ошибок, где, например, вводится слегка неправильная сигнатура метода в переопределяемой версии, и поэтому определяется новая функция вместо переопределения существующей. Компилятор будет отмечать ошибку, если функция помечена как override
, и компилятор не сможет идентифицировать ее версию в каком-либо базовом классе.
Если функция не является виртуальной, то можно все равно определить версии этого метода в производном классе, в этом случае говорят, что версия производного класса скрывает версию базового класса, а вызываемый метод зависит только от типа ссылки, используемой для доступа к классу, так же как это зависит от типа указателя, используемого для доступа к классу в C++.
В случае, если в C# версия функции в производном классе скрывает соответствующую функцию в базовом классе, можно явно указать это с помощью ключевого слова new
.
class MyBaseClass {
public void DoSomething(int X) {
// и т.д.
}
// и т.д.
}
class MyClass : MyBaseClass {
public new void DoSomething(int X) {
// и т.д.
} и т.д.
}
Если не пометить новую версию класса явно как new
, то код по-прежнему будет компилироваться, но компилятор будет выдавать предупреждение. Предупреждение служит для защиты от любых трудноуловимых ошибок, возникающих во время выполнения. Например, когда написана новая версия базового класса, в которой добавлен метод, имеющий, оказывается, такое же имя, как и существующий метод в производном классе.
В C# можно объявить абстрактную функцию, также как это делается в C++ (в C++ она называются еще чисто виртуальной функцией), но в C# синтаксис будет отличаться: вместо использования =0
в конце определения применяется ключевое слово abstract
.
C++:
public:
virtual void DoSomething(int X) = 0;
C#:
public abstract void Dosomething(int X);
Как и в C++, можно создать экземпляр класса, только если он сам не содержит абстрактных методов и предоставляет реализации всех абстрактных методов, которые были определены в любом из его базовых классов.
Структуры
Синтаксис определения структур в C# соответствует синтаксису определения классов.
struct MyStruct {
private SomeField;
public int SomeMethod() {
return 2;
}
}
Наследование и связанные концепции, виртуальные и абстрактные функции не допускаются. В остальном базовый синтаксис идентичен синтаксису классов, за исключением того, что ключевое слово struct
заменяет в определении class
.
Существуют, однако, различия между структурами и массами, когда дело доходит до создания. В частности, структуры всегда имеют конструктор по умолчанию, который обнуляет все поля, и этот конструктор по-прежнему присутствует, даже если определены другие собственные конструкторы. Также невозможно явно определить конструктор без параметров для замены конструктора по умолчанию. Можно определить только конструкторы с параметрами. В этом отношении структуры в C# отличаются от своих аналогов в C++.
В отличие от классов в C#, структуры являются типом данных значений. Это означает, что такая инструкция как:
MyStruct Mine;
реально создает экземпляр MyStruct
в стеке. Однако в C# этот экземпляр не инициализируется, если конструктор не вызван явно:
MyStruct Mine = new MyStruct();
Если все поля-члены из MyStruct
являются открытыми, можно альтернативно инициализировать структуру, преобразуя каждое поле-член по отдельности.
Константы
Ключевое слово const
в C++ имеет достаточно большой диапазон использования. Например, можно объявить переменные как const
, тем самым указывая, что их значения обычно задаются во время компиляции и не могут изменяться никакой инструкцией присваивания во время выполнения (хотя существует небольшой элемент гибкости, так как значение члена переменной const
может быть задано в списке инициализации конструктора, а это предполагает в данном случае, что значение может вычисляться во время выполнения). Можно также применять const
к указателям и ссылкам, чтобы запретить их использование для изменения данных, на которые они указывают, и можно также использовать ключевое слово const
для модификации определений параметров, передаваемых в функции. В этом случае const
показывает, что переменная, которая была передана по ссылке или через указатель, не должна изменяться функцией. Как упоминалось ранее, сами члены функции тоже могут быть объявлены как const
, чтобы подчеркнуть, что они не изменяют содержащий их экземпляр класса.
C# позволяет также использовать ключевое слово const
для указания, что переменная не может изменяться. Во многих отношениях, однако, применение const
более ограничено в C#, чем в C++. В C# единственное использование const
состоит в фиксировании значения переменной (или элемента, на который указывает ссылка) во время компиляции. Оно не может применяться к методам или параметрам. С другой стороны, C# имеет преимущества перед C++ в том смысле, что синтаксис в C# допускает немного больше гибкости при инициализации полей const во время выполнения.
Синтаксис объявления констант различается в C# и C++, поэтому мы рассмотрим его более подробно. Синтаксис C# использует два ключевых слова — const
и readonly
. Ключевое слово const
предполагает, что значение задается во время компиляции, в то время как readonly
предполагает, что оно задается однажды во время выполнения в конструкторе.
Так как все в C# должно быть членом класса или структуры, не существует, конечно, прямого эквивалента в C# для глобальных констант C++. Эту функциональность можно получить с помощью перечислений или статических полей-членов класса.
Константы, ассоциированные с классом (статические константы)
Обычный способ определения статической константы в C++ состоит в записи члена класса как static const
. C# делает это похожим образом, но с помощью более простого синтаксиса:
Интервал:
Закладка: