Симон Робинсон - 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# поддерживает "неровные" массивы и добавляет многомерные массивы. Может сбить с толку то, что Java не делает между ними различий:
int [] х = new int[20]; // как в Java, только [] должны следовать
// за типом
int [,] у = new int[12, 3]; // то же самое, что int у[] [] = new
// int[12][3];
int[][] z = new int[5][]; // то же самое, что и int x[][] = new
// int [5][];
Примечание. Ключевое слово int[]
обозначает реальный тип данных, поэтому синтаксически оно записывается таким образом. Нельзя, как в Java, поместить двойные скобки перед или после переменной. Прежде чем перейти к дополнительным деталям о ссылочных типах и обсуждению таких концепции, как классы, давайте поговорим немного об операциях. Следующий раздел посвящен операторам.
Операторы
В Java конечный результат применения оператора к одному или нескольким операндам является новым значением для одного или нескольких вовлеченных операндов. C# предоставляет аналогичную функциональность, однако, как можно будет увидеть в разделах ниже, существуют незначительные различия между C# и Java даже в этой области. В этом разделе мы охватим разные группы операторов в C# и обсудим чем отличается в C# и Java каждая группа.
Присваивание
C# и Java используют знак =
для присваивания значений переменным. В C#, как и в Java, переменные присвоенные объектам содержат только ссылку или "адрес" на этот объект, а не сам объект. Присваивание одной ссылочной переменной другой таким образом просто копирует "адрес" в новую переменную. Следовательно обе переменные теперь имеют возможность делать ссылку на один объект. Эту концепцию легко проиллюстрировать с помощью примера. Рассмотрим класс ExOperators
, приведенный ниже:
public class EXOperators {
internal int р;
public EXOperators() {}
public static void Main() {
ExOperators one = new EXOperators();
one.p = 200;
EXOperators two;
two = one;
two.p = 100;
Console.WriteLine(two.p);
Console.WriteLine(one.p);
}
}
Пока проигнорируем ключевое слово internal
перед переменной р
. Оно является модификатором доступа, который будет рассмотрен далее в этой главе. Достаточно сказать, что оно делает переменную р
видимой для метода Main
. Приведенный выше пример создает экземпляр объекта EXOperators
и сохраняет его в локальной переменной one
. Эта переменная затем присваивается другой переменной — two
. После этого значение p
в объекте, на который ссылается two
, изменяется на 100. В конце выводится значение переменной p
в обоих объектах. Компиляция и выполнение этого даст результат 100 дважды, указывая, что изменение two.р
было тем же самым, что изменение значения one.р
.
Сравнение
Операторы сравнения обычно совпадают по форме и функциональности в обоих языках. Четырьмя основными операторами являются <
— меньше, чем, >
— больше, чем, <=
— меньше или равно и >=
— больше или равно.
Чтобы определить, принадлежит ли объект заданному классу или любому из классов предков, Java использует оператор instanceof
. Простой пример этого приведен в листинге ниже:
String у = "a string";
Object х = у;
if (х instanceof String) {
System.out.println("х is a string");
}
В C# эквивалентом instanceof
является оператор is
. Он возвращает true
, если тип времени выполнения заданного класса совместим с указанным типом. Версия C# приведенного выше кода будет иметь следующую форму:
string у = "a string";
object х = у;
if (х is System.String) {
System.Console.WriteLine("x is a string");
}
Операторы равенства aрифметические, условные, побитовые, битового дополнения и сдвига
В обоих языках операторы равенства могут использоваться для тестирования чисел, символов, булевых примитивов, ссылочных переменных. Все другие операторы, упомянутые выше работают таким же образом.
Преобразование типов
Преобразование в Java состоит из неявного или явного сужения или расширения преобразования типа при использовании оператора ()
. Можно выполнить аналогичное преобразование типа в C#. C# также вводит ряд действенных способов, встроенных в язык, среди них мы выделим упаковкуи распаковку.
Так как типы значений являются блоками памяти определенного размера, они прекрасно подходят для целей ускорения. Иногда, однако удобство объектов желательно иметь для типов значений. Упаковка и распаковка предоставляет механизм, который формирует линию соединения между типами значений и ссылочными типами, позволяя преобразовать их в и из объектного типа.
Упаковка объекта означает неявное преобразование любого типа значения в объектный тип. Экземпляр объекта создается и выделяется, а значение из типа значения копируется в новый объект. Здесь приведен пример, показывающий, как упаковка работает в C#:
// BoxEx.cs
public class OverflowEX {
public static void Main(String[] args) {
int x = 10;
Object obj = (Object)x;
Console.WriteLine(obj);
}
}
Такой тип функциональности недоступен в Java. Код, представленный ниже не будет компилироваться, так как примитивы не могут преобразовываться в ссылочные типы:
// BoxEx.java
public class BoxEX {
public static void main(String args[]) {
int x = 10;
object obj = (object)x;
System.out.println(obj);
}
}
Распаковка является просто преобразованием объектного типа, приводящим значение снова к соответствующему типу значения. Эта функциональность опять же недоступна в Java. Можно изменить предыдущий код для иллюстрации этой концепции. Сразу заметим, что в то время как упаковка является неявным преобразованием типа, распаковка требует явного преобразования типа. Вот новая реализация BoxEx.cs
:
// BoxEX.cs
public class OverflowEX {
public static void Main(String[] args) {
int x = 10;
Object, obj = (Object)x;
Console.WriteLine(obj);
int у = (int)obj;
Console.WriteLine(y);
}
}
Другим эффективным способом C#, предназначенным для преобразования типов, является возможность определить специальные операторы преобразования. Определенные пользователем преобразования выполняются из типа данных в тип, а не из экземпляра в экземпляр, поэтому они должны быть статическими операциями. Можно использовать ключевое слово implicite
для объявления определенных пользователем преобразований из одного типа в другой. Предположим, что имеются два класса Man
и Car
, которые полностью не связаны. Создадим определенное пользователем преобразование, которое переводит один класс в другой. Ниже приведен листинг Man.cs
:
Интервал:
Закладка: