Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
- Название:ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2007
- Город:Москва • Санкт-Петербург • Киев
- ISBN:ISBN 5-8459-1124-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание краткое содержание
В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования C# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET. файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML. Книга содержит множество примеров программного кода, призванного помочь читателю в освоении предлагаемого материала. Программный код примеров можно загрузить с Web-сайта издательства.
ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
public static int Add(int x, int y) {
int ans = x + y;
// Вызывающая сторона не увидит этих изменений,
// поскольку модифицируется копия оригинальных данных.
x = 10000; у = 88888;
return ans;
}
Здесь входные целочисленные параметры передаются по значению. Поэтому, если изменить значения параметров внутри данного метода, то вызывающая сторона об этом не узнает, поскольку изменяются значения копий целочисленных данных вызывающего объекта.
static void Main(string[] args) {
int x = 9, y = 10;
Console.WriteLine ("До вызова: X: {0}, Y: {1}", x, y);
Console.WriteLine("Ответ: {0}", Add(x, y));
Console.WriteLine("После вызова: X: {0}, Y: {1}", x, у);
}
Как вы и должны ожидать, значения х и у остаются теми же и после вызова Add().
Модификатор out
Теперь рассмотрим использование параметров out (от output – выходной). Если метод определен с выходными параметрами, то необходимо назначить этим параметрам подходящие значения до выхода из метода (если этого не сделать, будет сгенерирована ошибка компиляции).
Ниже для иллюстрации предлагается альтернативный вариант метода Add(), использующий C#-модификатор out и возвращающий сумму двух целых чисел в виде выходного параметра (обратите внимание на то, что возвращаемым значением самого метода теперь будет void).
// Выходные параметры задаются членом.
public static voidAdd(int x, int y, outint ans) {
ans = x + y;
}
При вызове метода с выходными параметрами тоже требуется указать модификатор out. Локальным переменным, используемым в качестве выходного параметра, не требуется присваивать значения до их использования (эти значения после вызова все равно будут потеряны), Например:
static void Main(string[] args) {
// Нет необходимости задавать значения
// локальным выходным переменным.
int ans;
Add(90, 90, outans);
Console.WriteLine("90 + 90 = {0} ", ans);
}
Этот пример предлагается здесь только для иллюстрации: нет никакой необходимости возвращать значение суммы с помощью выходного параметра. Но сам модификатор out играет очень важную роль: он позволяет вызывающей стороне получить множество возвращаемых значений от одного вызова метода.
// Возвращение множества выходных параметров.
public static void FillTheseVals(out int a, out string b, out bool c) {
а = 9;
b = "Радуйтесь своей строке.";
с = true;
}
Вызывающая сторона может вызвать этот метод следующим образом.
static void Main(string[] args) {
int i; string str; bool b;
FillTheseVals( outi, outstr, outb);
Console.WriteLine("Int равно: {0}", i);
Console.WriteLine("String равно: (0}", str);
Console.WriteLine("Boolean равно: {0}", b);
}
Модификатор ref
Теперь рассмотрим, использование в C# модификатора ref (от reference – ссылочный). Ссылочные параметры нужны тогда, когда требуется позволить методу изменять данные, объявленные в контексте вызова (например, в функциях сортировки или обмена данными). Обратите внимание на различие между выходными и ссылочными параметрами.
• Выходные параметры не требуется инициализировать перед передачей их методу. Причина в том, что сам метод должен присвоить значения выходным параметрам.
• Ссылочные параметры необходимо инициализировать до того, как они будут переданы методу. Причина в том, что передается ссылка на существующую переменную. Если не присвоить переменной начальное значение, это будет означать использование неинициализированной переменной.
Давайте продемонстрируем использование ключевого слова ref с помощью метода, в котором осуществляется обмен значениями двух строк.
// Ссылочные параметры.
public static void SwapStrings(ref string s1 , ref string s2) {
string tempStr = s1;
s1 = s2;
s2 = tempStr;
}
Этот метод можно вызвать так.
static void Main(string[] args) {
string s = "Первая строка";
string s2 = "Вторая строка";
Console.WriteLine("До: {0}, {1} ", s, s2);
SwapStrings( refs, refs2);
Console.WriteLine("После: {0}, {1} " , s, s2);
}
Здесь вызывающая сторона присваивает начальное значение локальным строковым данным (s и s2). По завершении вызова SwapStrings() строка s содержит значение "Вторая строка", a s2 – значение "Первая строка".
Модификатор params
Нам осталось рассмотреть модификатор params, позволяющий создавать методы, которым можно направить множество однотипных аргументов в виде одного параметра. Чтобы прояснить суть дела, рассмотрим метод, возвращающий среднее для любого числа значений,
// Возвращение среднего для 'некоторого числа' значений.
static double CalculateAverage(params double[] values) {
double sum = 0;
for (int i = 0; i ‹ values.Length; i++) sum += values[i];
return (sum / values.Length);
}
Этот метод принимает массив параметров, состоящий из значений с двойной точностью. Метод фактически говорит следующее: "Дайте мне любой набор значений с двойной точностью, и я вычислю для них среднюю величину". Зная это, вы можете вызвать CalculateAverage() одним из следующих способов (если не использовать модификатор params в определении CalculateAverage(), то первый из указанных ниже вариантов вызова этого метода должен привести к ошибке компиляции).
static void Main(string[] args) {
// Передача в виде списка значений, разделенных запятыми,.…
double average;
average = CalculateAverage(4.0, 3.2, 5.7);
Console.WriteLine("Среднее 4.0, 3.2, 5.7 равно: {0}", average);
//… или передача в виде массива значений.
double[] data = {4.0, 3.2, 5.7};
average = CalculateAverage(data);
Console.WriteLine ("Среднее равно: {0}", average);
Console.ReadLine();
}
Это завершает наше вводное обсуждение модификаторов параметров. Мы снова обратимся к этой теме немного позже (в этой же главе), когда будем обсуждать различия между типами значений и ссылочными типами. А пока что давайте рассмотрим итерационные и условные конструкции языка программирования C#.
Исходный код.Проект SimpleParams размещен в подкаталоге, соответствующем главе 3.
Итерационные конструкции
Все языки программирования предлагают конструкции обеспечивающие возможность повторения блоков программного кода, пока не выполнено условие завершения повторений. Если у вас есть опыт программирования, то операторы цикла в C# будут для вас понятными и не должны требовать пространных объяснений.
В C# обеспечиваются следующие четыре итерационные конструкции:
• цикл for;
• цикл foreach/in;
• цикл while;
• цикл do / while.
Давайте рассмотрим все указанные конструкции по очереди.
Читать дальшеИнтервал:
Закладка: